2 liujian011 liujian011 于 2015.05.31 20:55 提问

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个回答

bdmh
bdmh   Ds   Rxr 2015.05.31 21:15

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

tongyi55555
tongyi55555   2015.05.31 23:35

终极错误,你的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!!!\");}}";
fanst_
fanst_   2015.06.01 09:07

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

gaichenglin
gaichenglin   2015.06.01 11:15

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

beacon_2011
beacon_2011   Rxr 2015.06.01 11:45

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

u013132209
u013132209   2015.06.02 12:19
    int len;
    while ((len= br.read(buf))!= -1) {
        bw.write(buf, 0, len);
    }
u013132209
u013132209   2015.06.02 12:19
int len;
while ((len= br.read(buf))!= -1) {
    bw.write(len);
}
gujinyue1563
gujinyue1563   2015.06.03 10:00

学习学习,新手路过路过

u014803563
u014803563   2015.06.03 13:18

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

Csdn user default icon
上传中...
上传图片
插入图片