java bufferedReader 读出来为什么都是空的?
PHP中文网
PHP中文网 2017-04-18 09:36:10
0
3
430

帮朋友提问:

        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中文网

认证高级PHP讲师

모든 응답(3)
大家讲道理

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

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

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

으아악

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

巴扎黑

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

迷茫

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

에 추가하도록 변경
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!