writeUTF(String) 写入字符串时,FilePointer是怎么指向的??

问题描述

为什么使用rf.writeUTF()写入字符串时,当字符串为空时,rf.getFilePointer()返回为18,当String越长,文件指针反而指向的更前。小弟是菜鸟,希望大家多多指点!直接附上代码。import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;public class RandomAccessTest {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString a = File.separator;String s1 = "C:" + a + "test";File file = new File(s1);Student stu1 = new Student("jjkbwqdsa", 20);Student stu2 = new Student("1fdasdasd7", 20);Student stu3 = new Student("啵啵啵", 20);if (!(file.exists())) {file.mkdir();}RandomAccessFile rf = new RandomAccessFile(new File(file, "1.txt"),"rw");try {rf.writeUTF(stu1.name);System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); //此时文件指针当前位置:10rf.writeInt(stu1.age);System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); //此时文件指针当前位置:14rf.writeChars(stu2.name);System.out.println("此时文件指针当前位置:"+rf.getFilePointer());//此时文件指针当前位置:30} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} try {rf.seek(31);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} rf.writeUTF(stu3.name);System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); //此时文件指针当前位置:52 ????这个怎么由30一下跳到52了,求解!}}class Student {String name;int age;private static final int LEN = 8;public Student(String name, int age) {if (name.length() > LEN) {name = name.substring(0,;} else {while (name.length() < LEN)name = name + "u0000";}this.age = age;this.name = name;}}

解决方案

前面都不说了,name3 = "啵啵啵u0000u0000u0000u0000u0000"这个没问题我们把输出分开System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --31 rf.writeUTF("啵啵啵"); System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --42 rf.writeUTF("u0000u0000u0000u0000u0000"); System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --54 现在结果54给你的52是一样的,因为我多输了一次,这个没问题,42到54也没问题.lz还有一个应该注意就是rf没有close。

时间: 2024-09-22 13:44:27

writeUTF(String) 写入字符串时,FilePointer是怎么指向的??的相关文章

java创建文件,并向文件中写入字符串,读取字符串到屏幕

public class FileTest01 { public static void writeFileString() { File file = new File("E:\\zkn"); if(!file.isDirectory()) file.mkdir();//创建目录 File fileDir = new File(file,"zkn.txt"); if(!fileDir.isFile()){ try { fileDir.createNewFile()

JavaScript拆分字符串时产生空字符怎么解决?

  一.问题描述 使用JavaScript的split方法拆分字符串时出现一些空字符串"",尤其是当使用正则表达式作为分隔符的时候.   二.相关问题 javascript正则表达式对字符串分组时产生空字符串组? 在上面这个问题中,题主使用正则表达式对字符串进行分割时产生了多个空字符串"",代码如下: 代码如下: '张sdf四上法asdf翁芬aa33网s'.split(/([u4e00-u9fa5]{1})/gi); //输出["", "

将数据转化成字符串时:用字符串的链接 还是 StringBuilder

/*   目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{    public static void main(String[] args){        int[] arr={1,2,4,5};        System.out.println(arrayToString(arr));    }        /*  public static String arrayToString(int[] arr){//

scanner-JAVA,当键盘输入多行字符串时,如何停止输入。

问题描述 JAVA,当键盘输入多行字符串时,如何停止输入. Scanner in=new Scanner(System.in); String[] input = new String[26]; for(int i = 0; input[i] != ""end""; i++){ input[i] = in.next(); } in.close(); 想要达到的效果:执行程序后由键盘输入:thisisthefistlinethisisthesecondlineend结

c# 求存储字符串到txt文件并且能第二次打开文件追加写入字符串的例程

问题描述 c# 求存储字符串到txt文件并且能第二次打开文件追加写入字符串的例程 我在做串口通信的项目 之前写了一个 但是打开文件后发现有时根本没有字符 有时只有几个文字 这个问题也求助各位大侠帮助. 解决方案 string s = "123"; if (!File.Exist("1.txt")) File.WriteAllText("1.txt", s); else File.AppendAllText("1.txt", s

C#在输出字符串时如何控制缩进量

问题描述 C#在输出字符串时如何控制缩进量 例如在显示家庭成员信息时,需要按类别显示不同的缩进量,如: 我的家人: 爸爸: 姓名: **** 年龄: **** 职业: **** 妈妈: 姓名: **** 年龄: **** 职业: **** ... 你的家人: 爸爸: 姓名: **** 年龄: **** 职业: **** 妈妈: 姓名: **** 年龄: **** 职业: **** ... 也就是对家庭成员缩进2字符,对每个成员的信息缩进4字符,该如何控制呢? 解决方案 控制台字符是等宽的,直接用

输出-在asp中比较记录集字段与字符串时的问题

问题描述 在asp中比较记录集字段与字符串时的问题 ' rs 是记录集 If rs("num")="1" Then Response.Write "1" End If If rs("num")=Server.HTMLEncode("1") Then Response.Write "2" End If 结果只输出 1,不输出 2.请问这是为什么,为什么第二个 If 的比较会是 False?

c/c++-使用 mysql c api 中,预处理查询条件 当过滤字段是字符串时

问题描述 使用 mysql c api 中,预处理查询条件 当过滤字段是字符串时 #include <stdio.h> #include <mysql/mysql.h> #include <string.h> int main(void) { // declares MYSQL * connection = NULL; MYSQL_STMT * stmt = NULL; MYSQL_BIND bind[3]; MYSQL_BIND inbind; // preproce

c++-C++宏定义字符串时出错

问题描述 C++宏定义字符串时出错 在用xcode写cocos2d的程序时,遇到一个问题,当调试环境是mac时,需要的文件路径为绝对路径,调试环境是iphone时,文件路径直接是文件名就可以了.为了解决这个问题,尝试写了一下宏.如下: #define RUN_IN_IOS #define TO_STRING(_string) #_string #ifdef RUN_IN_IOS #define GET_FILE(_fileName) TO_STRING(_fileName) #else #def