java中关于将字符串转换成文件的问题,代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

public class ToFileStream {
public static void main(String[] args) throws IOException {
//将字符串转换成文件
String str="public class HelloWorld{public static void main(String[] args){System.out.println('Hello world!!!');}}";
String path="D:/path/HelloWorld.java";

File file =new File(path);

if(!file.getParentFile().exists())
{

         file.getParentFile().mkdirs();

     }
     BufferedReader br=new BufferedReader(new StringReader(str));//将读字符流转换成读字节流
     BufferedWriter bw=new BufferedWriter(new FileWriter(path));//将写文件流转换成写字节流
     char[] buf=new char[1024];
     int len;
     len=br.read(buf);
     while(len !=-1)
     {
         bw.write(buf, 0, len);
     }
     bw.flush();
     br.close();
     bw.close();
     if(br!=null)
     {

         br.close();
     }

}

}
但是转换后这个文件字节码很多,文件打开时显示文件太大,等很久都打不开,貌似是哪个流没有关闭,但原因我不清楚,求大神帮忙。

9个回答

你看看文件尺寸多大,也许你写入的数据确实太多

终极错误,你的while中没有更新len,因此你这个根本就不会执行完毕,最终的结果是你的程序不会终止,直到你的电脑崩溃。
错误代码:

         int len;
     len=br.read(buf);
     while(len !=-1)
     {
         bw.write(buf, 0, len);
     }

修改后代码

      int len = br.read(buf);
        while (len != -1) {
            bw.write(buf, 0, len);
            len = br.read(buf);
        }

第二个错误是你输出的内容中,应该是双引号,而不是单引号,否则输出的程序无法编译通过,将str修改为如下:

 String str = "public class HelloWorld{public static void main(String[] args){System.out.println(\"Hello world!!!\");}}";

如@那一抹代码 所说,**死循环了**,另外很重要一点,while每次循环都要从输入流读数据,不能只读第一次:
len=0;
while((len=br.read(buf)) != -1)
{
bw.write(buf, 0, len);
}

这个是死循环吧。。。。。。新手路过!!

文件太大是有多大?具体多少M?
建议你装一个editplus
我之前看日志文件几百M,记事本就是打不开,后来用这个效率高很高

    int len;
    while ((len= br.read(buf))!= -1) {
        bw.write(buf, 0, len);
    }
int len;
while ((len= br.read(buf))!= -1) {
    bw.write(len);
}

学习学习,新手路过路过

while那部分程序死循环了帅锅

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问