使用Swing基本组件和合适的布局管理器编写文件复制程序界面,使用JFileChooser文件选择器,实现源文件和目标路径的图形化操作,文件复制程序具体操作流程如下:
(1)程序运行主界面
(2)单击“浏览”按钮,弹出文件选择界面,选择需要复制的源文件
(3)同理操作,选择目标路径,然后单击“开始复制”完成文件复制
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import javax.swing.*;
public class CopyFileDemo extends JFrame {//创建窗体
JLabel jl1 = new JLabel("源 文 件:");
JTextField jtf1 = new JTextField(25);
String fileName;
String copyFromFilePath;
String copyToFilePath;
JButton jb1 = new JButton("浏览");
JLabel jl2 = new JLabel("目标路径:");
JTextField jtf2 = new JTextField(25);
JButton jb2 = new JButton("浏览");
JButton copyjb = new JButton("开始复制");
JLabel jl3 = new JLabel();
public CopyFileDemo() throws ClassNotFoundException, InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
this.setTitle("文件复制程序");
this.setLayout(new GridLayout(5, 1));
this.setSize(500, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp1 = new JPanel();
jp1.add(jl1);
jp1.add(jtf1);
jp1.add(jb1);
this.add(jp1);
jb1.addMouseListener(new ButtonListener1());
JPanel jp2 = new JPanel();
jp2.add(jl2);
jp2.add(jtf2);
jp2.add(jb2);
this.add(jp2);
jb2.addMouseListener(new ButtonListener2());
JPanel jp3 = new JPanel();
jp3.add(copyjb);
this.add(jp3);
copyjb.addMouseListener(new CopyButtonListener());
JPanel jp5 = new JPanel();
jp5.add(jl3);
this.add(jp5);
}
// 以下是内部类的使用
class ButtonListener1 extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
JFileChooser fc = new JFileChooser();
int val = fc.showOpenDialog(CopyFileDemo.this); // 文件打开对话框
if (val == fc.APPROVE_OPTION) {
// 选择要复制的源文件
copyFromFilePath = fc.getSelectedFile().getAbsolutePath();
fileName = fc.getSelectedFile().getName();
jtf1.setText(copyFromFilePath);
} else {
// 未正常选择文件,如选择取消按钮
jtf1.setText("未选择文件!");
}
}
}
class ButtonListener2 extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
JFileChooser fc = new JFileChooser("F:\\");
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int val = fc.showOpenDialog(CopyFileDemo.this); // 文件打开对话框
if (val == fc.APPROVE_OPTION) {
// 选择目标文件
copyToFilePath = fc.getSelectedFile().getPath();
jtf2.setText(copyToFilePath);
} else {
// 未正常选择文件,如选择取消按钮
jtf2.setText("未选择文件夹!");
}
}
}
class CopyButtonListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
try {
copyFile(); //复制文件
Component CopyFileDemo;
JOptionPane.showMessageDialog(CopyFileDemo.this,"文件复制成功");
} catch (IOException ex) {
JOptionPane.showMessageDialog(CopyFileDemo.this,"文件路径有误");
throw new RuntimeException(ex);
}
}
}
public void copyFile() throws IOException {
File copyFromFile = new File(jtf1.getText()); // 通过源文件路径,创建源文件对象
File copyToFile = new File(jtf2.getText() + "/" + fileName); // 通过目标文件路径,创建目标文件对象
FileReader rf = new FileReader(copyFromFile);//创建文件流,进行文件的读写
FileWriter wf = new FileWriter(copyToFile);
int b;
while ((b = rf.read()) != -1)//一个字符一个字符的读
wf.append((char)b);
rf.close();//关闭文件流
wf.close();
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
IllegalAccessException, UnsupportedLookAndFeelException {
CopyFileDemo ad = new CopyFileDemo();
ad.setVisible(true);
}
}