java 输入输出流的复制文件的问题

importjava.io.*;publicclassfuji{publicstaticvoidmain(Stringarg[]){intshuru,shuchu;//记... import java.io.*;
public class fuji
{

public static void main(String arg[])

{
int shuru,shuchu;//记录是否输入输出完成
byte ru[]=new byte[2000];//存放读取的内容
byte chu[]=new byte[2000];
//读入内容
try
{
FileInputStream in1=new FileInputStream("E:\\java\\test.java");
if((shuru=in1.read(ru,0,2000))==-1)
System.out.println("读取文件结束!");//可不知道怎么才能为读完
System.out.println("读取完成!");
}
catch (Exception e)
{
String err=e.toString();
System.out.println(err+" 读入出错!");
}

//复制内容
try
{
FileOutputStream out1=new FileOutputStream("1.text");
//if((shuchu=out1.write(ru,0,2000))==-1)
//{
out1.write(ru,0,2000);//这里的2000要小于ru数组的大小。
out1.close();
System.out.println("复制成功!");
// }
}
catch (Exception e)
{
String err=e.toString();
System.out.println(e+"复制失败!");
}

}
}

用什么方法能确定我读完了E:\\java\\test.java文件的内容呢.
或者说该怎么处理才能刚好用一个语句来读完test.java文件里的内容.
展开
 我来答
198901245631
推荐于2017-10-10 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1741万
展开全部
可以通过“BufferedReader”读取文件内容,之后通过OutputStreamWriter 写入新文件,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/testCopy.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”
bre = new BufferedReader(new FileReader("D:/test.txt"));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
pw.write(str );//将要写入文件的内容,可以多次write
};
bre .close();//关闭流
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
降龙狂魔
2008-10-17 · TA获得超过182个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:60.3万
展开全部
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class fuji {

public static void main(String arg[])
{
//文件复制最好用完整一点的输入输出流,InputStreamReader将字节流变为字符流的桥梁。
//然后BufferedReader以行为单位(readLine()方法)把信息读成字符串。在java中一行为空
//或者有空格,并不代表这一行是null。只有当文件读完时,readLine()才会返回为null。所以
//用这个来判断是否读完。
//用字节来读取的话,逻辑不够严密,因为你不知道该文件具体要多少个字节来存放。

// int shuru, shuchu;// 记录是否输入输出完成
// byte ru[] = new byte[2000];// 存放读取的内容
// byte chu[] = new byte[2000];

StringBuffer sb = new StringBuffer();
String content = null;
// 读入内容
try
{
FileInputStream in1 = new FileInputStream("E:\\java\\test.java");
InputStreamReader isr = new InputStreamReader(in1);
BufferedReader br = new BufferedReader(isr);

while (true)
{
String str = br.readLine();
if (null == str)
{
break;
}
sb.append(str + "\n");
}
content = sb.toString();
System.out.println("读取完成!");
} catch (Exception e) {
String err = e.toString();
System.out.println(err + " 读入出错!");
}

// 复制内容
try
{
FileOutputStream out1 = new FileOutputStream("E:\\1.text");
//第一种实现的方法,但输入到1.text中格式无法保证。
// method1(content,out1);
PrintStream ps = new PrintStream(out1);

//为了保持格式,还是用第二种方法吧,虽然麻烦一点点。
method2(content,ps);
// out1.write(ru, 0, 2000);// 这里的2000要小于ru数组的大小。
// out1.close();
System.out.println("复制成功!");
// }
} catch (Exception e) {
String err = e.toString();
System.out.println(e + "复制失败!");
}
}

//方法一,可以实现,但不保证格式。
public static void method1(String content,FileOutputStream fos) throws IOException
{
byte[] b;
try
{
b = content.getBytes("GBK");
fos.write(b,0,b.length);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}

//方法二,保持原格式。其实应该是读一行,就复制一行容易实现,但为了风格统一只有写在这里了。
public static void method2(String content,PrintStream ps)
{
String[] str = content.split("\\n");
for (int i = 0; i < str.length; i ++)
{
ps.println(str[i]);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在天湖山弹吉他的米老鼠
推荐于2017-09-29 · TA获得超过2064个赞
知道小有建树答主
回答量:1546
采纳率:100%
帮助的人:1033万
展开全部
import java.io.*;

class UseIOj{
public static void main(String [] args){
File f1 = new File("E:/1.jpg");
File f2 = new File("D:/2.jpg");
BufferedInputStream in = null;
PrintStream out = null;
byte[] b = new byte[1024];
long i = 0L;
try{
in = new BufferedInputStream(new FileInputStream(f1));
out =new PrintStream(new BufferedOutputStream(new FileOutputStream(f2)));
while((i = in.read(b,0,b.length)) != -1){
System.out.println(i);
out.write(b);
}

}
catch(IOException io){

}
finally{
try{
if(in != null){
in.close();
}
if(out != null){
out.close();
}
}
catch(IOException io){

}

}
}

}

自带了方法 你可能不知道 查下API吧 我这个是好使的 直接就能用 你可以看一下

最好是用BUFFER系列的来读
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huuchinahuu
2008-10-16 · TA获得超过1953个赞
知道小有建树答主
回答量:519
采纳率:0%
帮助的人:448万
展开全部
你这样打出来似乎和问题一点关系都没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式