实现如下功能的应用程序,实现文件的复制操作:
图 1 程序界面
用户在图 1 中点击“选择文件”按钮时,弹出如下文件选择框(用户可选择要复制的文件):
用户在图 1 中点击“选择位置”按钮时,弹出如下选择框(用户可选择要复制到的位置):
用户选择好要复制的文件和复制到的位置后,点击图 1 中的“开始复制”按钮后,
开启一个线程用于完成文件的复制操作(使用 FileInputStream 读取原文件的内容,
同时使用 FileOutputStream 写入到目的地文件中去,目的文件的命名在原有文件名
后增加“-副本”即可)。
大部分代码已给出,请完善即可:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Toolkit;
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.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class CopyFileJFrame extends JFrame {
// 窗体上所要添加的组件都定义成员变量
private JLabel jLabel1, jLabel2;
private JTextField srcFileJTextField, tarFileJTextField;
private JButton btn1, btn2, copyButton;
private File srcFile,tarFile;//分别用于保存用户选择的要复制的文件和复制到的位置
private CopyFileThread thread;//用于完成复制文件操作的线程
// 在构造方法中完成所有窗体初始化的工作
public CopyFileJFrame() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dimension = toolkit.getScreenSize();// 读取屏幕的分辨率
setBounds(dimension.width / 3, dimension.height * 3 / 8,
dimension.width / 3 - 50, dimension.height / 4);
setTitle("复制文件");// 设置标题栏的文字
Container container = this.getContentPane();// 获取内容面板
FlowLayout flowLayout = new FlowLayout();// 创建流式布局,布局策略是按照组件添加的先后顺序自动从左到右从上到下排列
container.setLayout(flowLayout);// 把内容面板的布局设置为流式布局
// 创建组件
jLabel1 = new JLabel("要复制的文件:");
jLabel2 = new JLabel("复制到:");
srcFileJTextField = new JTextField(20);
srcFileJTextField.setEditable(false);
tarFileJTextField = new JTextField(20);
tarFileJTextField.setEditable(false);
btn1 = new JButton("选择文件");
btn2 = new JButton("选择位置");
copyButton = new JButton("开始复制");
// 添加组件
container.add(jLabel1);
container.add(srcFileJTextField);
container.add(btn1);
container.add(jLabel2);
container.add(tarFileJTextField);
container.add(btn2);
container.add(copyButton);
MyActionListener listener = new MyActionListener();
btn1.addActionListener(listener);
btn2.addActionListener(listener);
copyButton.addActionListener(listener);
setVisible(true);// 设置窗体可见,习惯放在最后一句
}
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() == btn1) {
JFileChooser fileChooser=new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int n=fileChooser.showOpenDialog(CopyFileJFrame.this);
if(n==JFileChooser.APPROVE_OPTION){
srcFile=fileChooser.getSelectedFile();
srcFileJTextField.setText(srcFile.getAbsolutePath());
}
}
if (arg0.getSource() == btn2) {
JFileChooser fileChooser=new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int n=fileChooser.showDialog(CopyFileJFrame.this, "复制到");
if(n==JFileChooser.APPROVE_OPTION){
tarFile=fileChooser.getSelectedFile();
tarFileJTextField.setText(tarFile.getAbsolutePath());
}
}
if (arg0.getSource() == copyButton) {
if(srcFileJTextField.getText()!=null&&tarFileJTextField.getText()!=null){
if(thread==null||thread.isAlive()==false){
//创建线程,并启动线程
(完善代码)
}
}
}
}
}
private class CopyFileThread extends Thread{
@Override
public void run() {
//完成文件的复制操作,最终弹出一个消息框提示用户"复制文件已完成!"
(完善代码)
}
}
public static void main(String[] args) {
CopyFileJFrame frame = new CopyFileJFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我们可以看到,这个题目中的大部分代码都已给出,而我们要做的就是在其中的(完善代码)部分键入代码,完成这个程序。
左下角翻页