package Lesson12;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Copy
{
static
{
System.out.println("请输入源、目标文件的完整名称:");
}
public static void main(String[] args)
{
if(args.length!=2)
{
System.out.println("输入的参数不正确.");
System.out.println("例如:源文件路径  目标文件路径");
System.exit(1);
}
File f1=new File(args[0]);
File f2=new File(args[1]);
if(!f1.exists())
{
System.out.println("源文件不存在!");
System.exit(1);
}
InputStream input=null;
OutputStream out=null;
try
{
input=new FileInputStream(f1);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
try
{
out=new FileOutputStream(f2);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
if(input!=null&&out!=null)
{
int temp=0;
try
{
while((temp=input.read())!=-1)//------->它读取的只是一个字节
out.write(temp);//—————>而它写入的也只是一个字节,那么当复制的
System.out.println("复制完成!");//数据不是一个字节呢,比如是汉字,要正确复制的
}//                                       它是如何保证不出现乱码?

catch (IOException e)
{
e.printStackTrace();
System.out.println("复制失败!");
}
try
{
input.close();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}}

解决方案 »

  1.   

    out.write(temp) 之后用标记一下 防止出错后 中文字不完整
      

  2.   

    看你输入的文件有没有中文,有点话是会出现乱码的。可以用DataInputStream(比较好的).然后writeUTF()或者readUTF()
    最好的一种是用文件流FileReader和FileWriter
    比如
    import java.io.*;
    public class Iocopy 
    {
       public static void main(String[] args)
       {
       FileReader fr=null;
       FileWriter fw=null;
       int b=0;
       try
       {
       fr=new FileReader("E:/C++视频日记.txt");
       fw=new FileWriter("E:/Iocopy.txt");
       while((b=fr.read())!=-1)
       {
       fw.write(b);
       }
       fr.close();
       fw.close();
       }catch(FileNotFoundException e)
       {
       System.out.println("找不到指定的文件!");
       System.exit(-1);
       }catch(IOException e)
       {
       System.exit(-1);
       }
       System.out.println("文件拷贝成功");
       }
    }望LZ体谅辛苦,给点分
      

  3.   

    FileInputStream跟本就没实现() 
      

  4.   

    字节复制不会有任何问题,因为一个汉字也是2-3个字节表示,一个read不完,下几次read就完成了,只不过 用System.out.println()显示会有问题。
      

  5.   

    哪里有什么标记,标记什么啊,汉字如果用UTF8编码是3个字节,你一下子读一个字节有什么问题么?而且字节流的精髓就是不管你文件什么内容,是文本文件也好可执行文件也好,就是把文件看成字节的结合,只需要吧字节全部搬运过去,一切工作自然搞定,中间过程文件逻辑拆分是不是正确根本不重要,IO只需要字节流的各个字节代码前后顺序和值正确就行了