编写代码实现文件拷贝功能,并分析提高文件读写效率的办法。
求大佬带带
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