搜尋

首頁  >  問答  >  主體

java bufferedReader 读出来为什么都是空的?

帮朋友提问:

        File file1 = new File("D:\\a.txt");
        File file2 = new File("D:\\a.txt");
        FileWriter fileWriter2 = new FileWriter(file2);
        FileReader fileReader = new FileReader(file1);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        BufferedWriter bufferedWriter2 = new BufferedWriter(fileWriter2);
        String length = null;
            
        while((length=bufferedReader.readLine())!=null) {
            System.out.println(length);
            
            bufferedWriter2.write(length);
        }
        fileReader.close();
        bufferedWriter2.close();

这段代码为什么读到的length都是null?
我个人觉得是因为file1和file2同时打开a.txt,会出现读写冲突,导致都出来的都是null,不知大家怎么看?

PHP中文网PHP中文网2811 天前476

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-04-18 09:38:10

    Java IO是基於位元組流來操作的,當然字元流在底層也是透過位元組流來完成的,其中有一個隱含的指標來表示當前讀取或寫入的位置。

    @iMouseWu 是對的,因為 FileOutputStream 对象被创建时会执行一个 nativeopen() 操作,如果没有指定 append 属性为 true,則指標會移動到檔案開始的位置,相當於清空了檔案操作。

    當然題主使用的 FileWiter 也是通过 FileOutputStream 來實現的。

        public FileWriter(File file, boolean append) throws IOException {
            super(new FileOutputStream(file, append));
        }

    另外需要讀寫同時操作文件,建議採用 RandomAccessFile

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:38:10

    我測試了一下new FileWriter(file2)自動清空了文件內容...
    但是查了一下文檔沒規定new的時候可以把內容全清空掉....

    回覆
    0
  • 迷茫

    迷茫2017-04-18 09:38:10

    FileWriter fileWriter2 = new FileWriter(file2,true);
    创建FileWriter 改append为true

    回覆
    0
  • 取消回覆