用RandomAccessFile.writeBytes()编写的文件中出现意外的额外字符

时间:2016-09-17 14:16:39

标签: java io bufferedreader randomaccessfile

我正在尝试使用“RandomAccessFile”将字符串写入(并读取)到文件,但“fio.writeBytes(file1str)”会在字符串的末尾添加一些垃圾:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try {
        System.out.println("Enter the D of planets: ");
        file1str = in.readLine();
        fio = new RandomAccessFile(new File("file1"), "rw");
        fio.writeBytes(file1str);
        System.out.println("Your enter: ");
        for (String retval: file1str.split(",")) {
            System.out.println(retval);
        }
        fio.close();
        System.out.println("Data saves to 'file1'!");
 }
    catch(FileNotFoundException e){
        System.out.println("File not found");
    }
    catch(IOException e){
        System.out.println("Error1");
    }


}

enter image description here

....但是如果我们打开文件,我们最后会看到额外的10700: enter image description here

抱歉我的英文不好

1 个答案:

答案 0 :(得分:3)

使用mode =“rw”创建Toast时,文档说“如果该文件尚不存在,则会尝试创建它”。

这意味着如果文件已经存在,那么就不会尝试创建它,删除它,截断它等等。

所以,正在发生的事情是,无论出于何种原因,你已经有一个“file1”,里面有9个字符,你的代码所做的是它只覆盖前4个字符。 (“5,10”部分。)

在写入之前尝试删除文件,一切都应该没问题。

或者,考虑一下选择RandomAccessFile是个坏主意的可能性,而是尝试使用RandomAccessFile,以正常人正常方式编写普通文本文件使用