찾다

 >  Q&A  >  본문

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일 전477

모든 응답(3)나는 대답할 것이다

  • 大家讲道理

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

    Java IO는 바이트 스트림을 기반으로 작동합니다. 물론 하위 계층에는 바이트 스트림을 통해 현재를 나타내는 암시적 포인터가 있습니다. 읽거나 쓸 위치입니다.

    @iMouseWu가 맞습니다. FileOutputStream 객체가 생성되면 native open() 작업을 수행하기 때문입니다. append 속성이 true으로 지정되지 않으면 포인터가 파일 작업을 지우는 것과 같습니다.

    물론 주어가 사용하는 FileWiterFileOutputStream를 통해 구현됩니다.

    으아악

    또한, 파일 읽기와 쓰기를 동시에 해야 한다면 RandomAccessFile을 사용하는 것이 좋습니다.

    회신하다
    0
  • 巴扎黑

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

    테스트해봤는데new FileWriter(file2) 파일 내용이 자동으로 지워졌네요...
    그런데 문서를 확인해 보니 새것을 사용하면 내용을 지울 수 있다고 명시되어 있지 않네요....

    회신하다
    0
  • 迷茫

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

    FileWriter fileWriter2 = new FileWriter(file2,true);
    FileWriter을 만들고 true

    에 추가하도록 변경

    회신하다
    0
  • 취소회신하다