当前位置: 首页 > 知识库问答 >
问题:

FileInputStream和FileOutputStream:读写同一个文件

颜修真
2023-03-14

我创建了一个内容为“Hello”的文本文件,我试图从文件中读取这些字符,并再次将其写回相同的文件。

    @Test
    public void testCopyStream() throws IOException {
        File workingDir = new File(System.getProperty("user.dir"));
        File testFile = new File(workingDir, "/test.txt");

        FileReader fin = new FileReader(testFile);
        FileWriter fos = new FileWriter(testFile);
        copyStream(fin, fos);
        fin.close();
        fos.close();
}
private void copyStream(Reader in, Writer out) throws IOException {
        int b;
        while ((b = in.read()) != -1) {
           out.write(b);
        }
    }

我尝试使用调试器来找出问题,调试器显示b=in.read()在while循环的第一次迭代时被分配-1。然后,我在检查文件内容时一步一步地执行代码,发现在执行语句final FileWriter fos=new FileWriter(testFile);之后,“hello”关键字就从文件中删除了。

我最初认为这是由于inputstreamoutputstream指向同一个文件,所以为了执行安全,JVM对文件进行了某种程度的“锁定”?

所以我试着交换这两行:

        FileWriter fos = new FileWriter(testFile);
        FileReader fin = new FileReader(testFile);
        

结果是一样的:在FileWriter fos=new FileWriter(testFile);语句之后,文件内容被删除

    null

共有1个答案

梁季
2023-03-14

FileWriter实际上在写入之前删除文件中的所有内容。若要保留文本,请使用

new FileWriter(file, true);

true参数是文件编写器的append参数。否则它只会覆盖所有内容

 类似资料:
  • 本文向大家介绍Java使用FileInputStream / FileOutputStream读/写文件,包括了Java使用FileInputStream / FileOutputStream读/写文件的使用技巧和注意事项,需要的朋友参考一下 示例 写入文件test.txt: 从文件test.txt中读取: 请注意,自Java 1.7起引入了try-with-resources语句,这使得读/写操

  • 问题内容: 我正在使用文件作为大数据的缓存。一个线程顺序地对其进行写入,另一个线程顺序地对其进行读取。 我可以确定在Java内存模型方面假设正确的“先发生”关系后,已经确定在一个线程中(由)写入的所有数据都可以来自另一个线程吗?是否记录了这种行为? 在我的JDK中,不覆盖,并且为空。这就是为什么我想知道… 有问题的流完全由我完全控制的类所拥有。保证每个流只能由一个线程访问。我的测试表明它可以按预期

  • 问题内容: 我正在尝试在同一CSV文件上进行读写: 我的csv文件是: 所以基本上,如果我的价值是我想用代替。上面的代码给了我空的CSV文件。 问题答案: 您应该使用其他输出文件名。即使您希望名称相同,也应该使用一些临时名称并最终重命名文件。 当您以“ w”(或“ wb”)模式打开文件时,此文件被“清除”-整个文件内容消失。的Python文档说: …“ w”仅用于写入(具有相同名称的现有文件将被删

  • 本文向大家介绍写一个读取文件和文件的方法相关面试题,主要包含被问及写一个读取文件和文件的方法时的应答技巧和注意事项,需要的朋友参考一下 var fs = require('fs'); var data = fs.readFileSync('./index.html', 'utf8'); // 停止执行代码直到操作结束 console.log(data) fs.readFile('./test.tx

  • 我试图写一个位图到任何通常的内部文件夹,如“图片,文档,下载”等。下面是我正在做的文件创建 我甚至试图在我的测试手机中为这个应用程序提供‘不受限制的访问’。 会有什么问题?我需要做哪些额外的事情? 编辑:当我祝酒时,myDir显示为/system/pictures。当我转到电话中的文件管理器时,在我的“电话存储”下,“图片”文件夹就在那里。这是Android中常见的文件夹,对吧?

  • 本文向大家介绍java对同一个文件进行读写操作方法,包括了java对同一个文件进行读写操作方法的使用技巧和注意事项,需要的朋友参考一下 同一个文件是不可以进行同时的读写的,因为我们写入文件会覆盖原文件的,如果这样,对于同一文件来来说,文件发生覆盖,无法进行下次读取 当然,对于两个不同的文件,可以一边读一边写的操作 题目:一个文本中存储26个无序字母,要求对字母排序后重新写入该文件中 分析:可以在内