【问题标题】:Unexpected extra characters in file written with RandomAccessFile.writeBytes()使用 RandomAccessFile.writeBytes() 写入的文件中出现意外的额外字符
【发布时间】:2016-09-17 14:16:38
【问题描述】:

我正在尝试使用“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");
    }


}

....但是如果我们打开文件,我们会在末尾看到额外的 10700:

对不起我的英语不好

【问题讨论】:

  • 您的代码看起来不错,它在我的环境中工作,尝试 in.close();读完一行
  • 以上代码 sn-p 应该可以按预期工作。您确定在此代码之后没有向文件写入任何内容。你可以在这里发布完整的课程吗?

标签: java io bufferedreader randomaccessfile


【解决方案1】:

当您使用 mode = "rw" 创建 RandomAccessFile 时,文档显示“如果文件不存在,则将尝试创建它。”

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

所以,无论出于何种原因,您已经有了一个包含 9 个字符的“file1”,而您的代码所做的是它只覆盖了前 4 个字符。 (“5,10”部分。)

在写入之前尝试删除文件,一切都会好起来的。

或者,考虑一下选择RandomAccessFile 是一个坏主意的可能性,然后尝试使用new BufferedWriter(new FileWriter(file)),以普通人通常使用的正常方式编写普通文本文件。子>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多