tuuli241 2022-02-22 00:54 采纳率: 100%
浏览 63
已结题

Java转换流 无输出内容

运行后,newTest文件中无任何内容,无报错。
是我哪里有问题吗?

import java.io.*;

public class StreamTest {
    public static void main(String[] args) {
        FileInputStream fis;
        InputStreamReader inputStreamReader = null;
        FileOutputStream outputStream;
        OutputStreamWriter outputStreamWriter = null;
        try {
            fis = new FileInputStream("D://Test.txt");
            inputStreamReader = new InputStreamReader(fis);
            outputStream = new FileOutputStream("D://newTest.txt");
            outputStreamWriter = new OutputStreamWriter(outputStream);
            char[] arr = new char[1024];
            int len = 0;
            while ((len = inputStreamReader.read(arr, 0, len)) > 0) {
                outputStreamWriter.write(arr, 0, len);
            }
            System.out.println(len);//运行后输出0
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                }
                if (outputStreamWriter != null) {
                    outputStreamWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  • 写回答

7条回答 默认 最新

  • CSDN专家-sinJack 2022-02-22 08:53
    关注
    int len = 0;
    while ((len = inputStreamReader.read(arr, 0, len)) > 0)
    

    这样写是不满足循环条件的,len初始就是0,等价于read(arr, 0, 0)从0位置读取0个字符吗,结果怎么会大于0?
    修改如下:

    while ((len = inputStreamReader.read(arr, 0, 1024)) > 0)
    

    或者

    while ((len = inputStreamReader.read(arr))!=-1)
    

    完整代码如下:

    import java.io.*;
    public class Main {
        public static void main(String[] args){
            FileInputStream fis;
            InputStreamReader inputStreamReader = null;
            FileOutputStream outputStream;
            OutputStreamWriter outputStreamWriter = null;
            try {
                fis = new FileInputStream("D://Test.txt");
                inputStreamReader = new InputStreamReader(fis);
                outputStream = new FileOutputStream("D://newTest.txt");
                outputStreamWriter = new OutputStreamWriter(outputStream);
                char[] arr = new char[1024];
                int len = 0;
                while ((len = inputStreamReader.read(arr))!=-1) {
                    outputStreamWriter.write(arr);
                    outputStreamWriter.flush();   //每次写完记得flush,刷新缓存区的内容
                }
                System.out.println(len);//运行后输出0
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (inputStreamReader != null) {
                        inputStreamReader.close();
                    }
                    if (outputStreamWriter != null) {
                        outputStreamWriter.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 修改了问题 2月22日
  • 创建了问题 2月22日