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();
            }
        }
    }
}
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();
            }
        }
    }
}

while ((len = inputStreamReader.read(arr, 0, len)) > 0) {
outputStreamWriter.write(arr, 0, len);
}
中read(arr,0,len)改为read(arr)试一下。

16行
while ( (len = inputStreamReader(read))> 0 ){

}
改一下试试, 你这里面用到 read(arr,0,len) 的时候 len 应该 =0。
方法跑完后才会给len 赋值, 所有len 还是0

如果上述还不行,把char类型数组改为byte类型数组,尝试一下。


public class FileTest8 {
    public static void main(String[] args) throws IOException {
        // 新创建一个文件"E:\\笔记\\test4.txt",往文件中写入"元旦假期我在学习""学习使我快乐",然后读取文件内容,并把它重新写到"E:\\笔记\\test5.txt"
        String pathName = "E:\\笔记\\test4.txt";
        String pathName1 = "E:\\笔记\\test5.txt";
        File file = new File(pathName);
        File file1 = new File(pathName1);
        FileWriter fw = null;
        BufferedWriter bw = null;
        FileWriter fw1 = null;
        BufferedWriter bw1 = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            // 创建文件
            file.createNewFile();
            file1.createNewFile();
            // 写入内容
            fw = new FileWriter(pathName);
            bw = new BufferedWriter(fw);
            fw1 = new FileWriter(pathName1);
            bw1 = new BufferedWriter(fw1);
            String str1 = "元旦假期我在学习";
            String str2 = "学习使我快乐";
            bw.write(str1);
            bw.newLine();
            bw.write(str2);
            bw.flush();
            // 读取内容
            fr = new FileReader(pathName);
            br = new BufferedReader(fr);
            String line = null;
            while ((line=br.readLine())!=null){
                System.out.println(line);
                // 重新写入新文件
                bw1.write(line);
                bw1.newLine();
                bw1.flush();
            }
            System.out.println("test4.txt的长度为:"+file.length()+"字节");
            System.out.println("test5.txt的长度为:"+file1.length()+"字节");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            bw1.close();
            br.close();
            fr.close();
            fw1.close();
            bw.close();
            fw.close();
        }
    }
}
结果
元旦假期我在学习
学习使我快乐
test4.txt的长度为:44字节
test5.txt的长度为:46字节

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632