【java大文件复制】

来源:互联网 发布:手机视频直播软件 编辑:程序博客网 时间:2024/05/17 06:36

用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){}    }}




0 0