JAVA编写程序实现文件拷贝,提高效率

编写代码实现文件拷贝功能,并分析提高文件读写效率的办法。

求大佬带带

FileInputStream,FileOubjectStream,大文件一般分块读写。

package gz.ht.org;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class CopyFileWindow extends JFrame implements ActionListener{
	JTextField t1,t2;
	JButton b1,b2,b3;
	public CopyFileWindow(){
		//设置标题
		super("文件拷贝");
		//获取内容面板
		Container c=this.getContentPane();
		//设置内容面板的布局方式为:流程布局
		c.setLayout(new FlowLayout());
		//实例化标签
		JLabel lb=new JLabel("请选择要复制的文件:");
		//将标签添加到内容面板中
		c.add(lb);
		//实例化文本框对象
		t1=new JTextField(15);
		//将文本框放到内容面板中
		c.add(t1);
		//实例化按钮对象
		b1=new JButton("...");
		//给按钮注册动作事件监听
		b1.addActionListener(this);
		//将按钮放到内容面板中
		c.add(b1);
		//实例化标签
		JLabel lb2=new JLabel("请选择文件存放目录:");
		//将标签添加到内容面板中
		c.add(lb2);
		//实例化文本框对象
		t2=new JTextField(15);
		//将文本框放到内容面板中
		c.add(t2);
		//实例化按钮对象
		b2=new JButton("...");
		//给按钮注册动作事件监听
		b2.addActionListener(this);
		//将按钮放到内容面板中
		c.add(b2);
		//实例化按钮对象
		b3=new JButton("复制");
		//给按钮注册动作事件监听
		b3.addActionListener(this);
		//将按钮放到内容面板中
		c.add(b3);
		//设置窗口关闭
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗口可见
		this.setVisible(true);
		//设置窗口自适应大小
		this.setSize(400, 150);
		//设置窗口在中间显示
		this.setLocationRelativeTo(null);
	}
	public static void main(String[] args) {
		new CopyFileWindow();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		//说明事件源是按钮b1,选择要拷贝的文件
		if(e.getSource()==b1){
			//实例化文件选择器对象
			JFileChooser chooser = new JFileChooser("");
			//设置对话框的类型,打开一个文件选择对话框
			chooser.setDialogType(JFileChooser.OPEN_DIALOG);
			//设置只能选择文件
			chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
			//设置对话框的标题
			chooser.setDialogTitle("请选择要拷贝的文件");
			//打开对话框并判断是否打开成功
			if(chooser.showOpenDialog(this)==chooser.APPROVE_OPTION){
				//给文本框赋值
				t1.setText(chooser.getSelectedFile().getAbsolutePath());
			}
		}
		//说明事件源是按钮b2,选择文件的存放路径
		if(e.getSource()==b2){
			//实例化文件选择器对象
			JFileChooser chooser = new JFileChooser("");
			//设置对话框的类型,打开一个文件选择对话框
			chooser.setDialogType(JFileChooser.OPEN_DIALOG);
			//设置只能选择文件夹
			chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			//设置对话框的标题
			chooser.setDialogTitle("请选择文件存放路径");
			//打开对话框并判断是否打开成功
			if(chooser.showOpenDialog(this)==chooser.APPROVE_OPTION){
				//给文本框赋值
				t2.setText(chooser.getSelectedFile().getAbsolutePath());
			}
		}
		//说明事件源是按钮b3,要拷贝文件
		if(e.getSource()==b3){
			 if (t1.getText().equals("") || t2.getText().equals("")) {
				 JOptionPane.showMessageDialog(this, "请设定源文件或目录路径");
	         }else{
	        	 //实例化文件对象
	        	 File file=new File(t1.getText());
	        	 //获取文件名称
	        	 String fileName=file.getName();
	        	 copyFile(t1.getText(),t2.getText()+"/"+fileName);
	         }
		}
	}
	public void copyFile(String srcfile,String tofile){
		try {
			//实例化一个文件输入流对象(将源文件读到内存中来)
			FileInputStream in=new FileInputStream(srcfile);
			//实例化一个文件输出流对象(将内存中的数据写出到磁盘中)
			FileOutputStream out=new FileOutputStream(tofile);
			//实例化一个字节数组(每次读取1M内容)
			byte b[]=new byte[1024*1024];
			//循环读取文件中的内容
			while(in.read(b)>0){
				//将读取到的内容写出到磁盘中去
				out.write(b);
			}
			JOptionPane.showMessageDialog(this,"复制成功");
			//关闭文件输入流
			in.close();
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

代码如上,万望采纳。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632