日期:2014-05-20  浏览次数:20873 次

java se 流的操作
下面是小弟写的一个复制txt文档的程序,可是出问题了,帮忙看看先!
package com.myself.copy;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Copy {
// public void copyFile(){
public static void main(String[] s) {
int i=0;
try {
InputStreamReader in = new InputStreamReader(new FileInputStream(
"D:\\360data\\重要数据\\我的文档\\文档\\TXT\\123.txt"));
OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream("D:\\360data\\重要数据\\我的文档\\文档\\TXT\\副本123.txt"));
while ((i = in.read())!=-1) {
out.write(i);
System.out.println("i");
}
} catch (FileNotFoundException e) {
System.out.println("文件或者文件夹没有找到!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("读写异常!");
e.printStackTrace();
}
}
}


最后运行的结果是这样的:
在文件夹里找到了副本123.txt,可是打开之后里面什么都没有(我的123.txt里面有几百个中文汉字),然后我在out.write(i)下面加了一句System.out.println("i");打印出来的全部是一个数字比如(1211 1469 65533 65533 1123 65533...)等等,这个是为什么啊?能解释一下吗?
随便问一下,哪里有i/o流操作的视频啊,我在这个地方纠结了半天,可还是对流有点不懂,希望大虾们能给出小弟一个答案!谢谢了先!

------解决方案--------------------
在 out.write(i);后面加一句out.flush();
你流还在缓冲区中,不刷新不会出来的!
还有要记得out.close();关毕流,用完就不要占用资源了
close();在关闭流之前会先刷新,所以不用flush()也是可以的
------解决方案--------------------
还有个问题忘了回答你了,read();方法的返回值是int 
 read()方法读取到的单个字符都会根据Unicode转成相应的int型数据,范围是0 到 65535 之间


------解决方案--------------------
Java code

OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream("D:\\360data\\重要数据\\我的文档\\文档\\TXT\\副本123.txt"),"utf-8");

------解决方案--------------------
while ((i = in.read())!=-1) {
out.write(i);

楼主只是为了写i而不是写内容?
------解决方案--------------------
建议看看孙鑫或者张孝祥的java基础视频