用java复制大文件最简单的方法就是用FileInputStream类和FileOutputStream类配合使用,几行代码就能搞定:
import java.io.*;
import java.awt.*;
public class Main
{
public static void main(String args[])throws Exception
{
Frame frame=new Frame("承载窗体");
FileDialog fd1=new FileDialog(frame,"文件选择对话框");
FileDialog fd2=new FileDialog(frame,"文件保存对话框");
fd1.setVisible(true);
String path1=fd1.getDirectory()+fd1.getFile();
fd2.setVisible(true);
String path2=fd2.getDirectory()+fd2.getFile();
FileInputStream fis=new FileInputStream(path1);
FileOutputStream fos=new FileOutputStream(path2);
int flag=-1;
byte f[]=new byte[1024];
while((flag=fis.read(f))!=-1)
{
fos.write(f,0,flag);
}
fos.close();
fis.close();
System.out.println("文件复制成功!");
System.exit(0);
}
}
但是,假如我们想要先把大文件保存成文本文件,然后再从文本文件中将字符读取出并还原成源文件的话该怎么做呢?
很明显,这需要FileInputStream,FileOutputStream,FileReader,FileWriter四个类共同发挥作用~
首先,将文件以字节形式读出并转换成十六进制字符串保存在某文件里:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class X
{
public static void main(String args[])throws Exception
{
Frame frame=new Frame("承载窗体");
FileDialog fd=new FileDialog(frame,"文件选择对话框");
FileDialog fd1=new FileDialog(frame,"文件保存对话框");
frame.setSize(1366,768);
fd.setVisible(true);
String path1,path2;
path1=fd.getDirectory()+fd.getFile();
fd1.setVisible(true);
path2=fd1.getDirectory()+fd1.getFile();
FileInputStream fis=new FileInputStream(path1);
FileWriter fr=new FileWriter(new File(path2));
int flag=-1;
byte f[]=new byte[2048];
while((flag=fis.read(f))!=-1)
{
String str="";
int i;
for(i=0;i<=flag-1;i++)
{
String temp=Integer.toHexString(f[i]&(0XFF));
if(temp.length()==1)
{
temp="0"+temp;
}
str=str+temp;
}
fr.write(str);
}
fr.close();
fis.close();
System.exit(0);
}
}
先假设保存十六进制字符串的文件是x.dat,那么,下一步就是从x.dat文件中两个字符两个字符的取出字符,转换成一个字节,并用FileOuputStream类保存入目标文件(目标文件与源文件格式相同,例如源文件是x.avi,那么目标文件的格式应该是y.avi).
将保存有源文件十六进制字符串的文件x.dat转换成目标文件:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
public class Y
{
public static void main(String args[])throws Exception
{
Frame frame=new Frame("承载窗体");
FileDialog fd=new FileDialog(frame,"文件选择对话框");
FileDialog fd1=new FileDialog(frame,"文件保存对话框");
fd.setVisible(true);
String path1=fd.getDirectory()+fd.getFile();
fd1.setVisible(true);
String path2=fd1.getDirectory()+fd1.getFile();
FileReader fr=new FileReader(new File(path1));
FileOutputStream fos=new FileOutputStream(path2);
try
{
int a,b;
while((a=fr.read())!=-1&&(b=fr.read())!=-1)
{
char ax=(char)a;
char bx=(char)b;
String ab=""+ax+bx;
byte temp;
temp = (byte)((Integer.decode("0X"+ab)).intValue());
fos.write(temp);
}
fos.close();
fr.close();
System.out.println("已经成功转换!");
System.exit(0);
}
catch(Exception e){}
}
}