【java大文件复制】

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值