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();
}
}
}
但是转换后这个文件字节码很多,文件打开时显示文件太大,等很久都打不开,貌似是哪个流没有关闭,但原因我不清楚,求大神帮忙。
你看看文件尺寸多大,也许你写入的数据确实太多
终极错误,你的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那部分程序死循环了帅锅