文件字节输入输出流的应用

一杯JAVA浓 做棵大树 7年前 (2017-05-03) 2782次浏览 1个评论

直接下载项目文件

实现如下功能的应用程序,实现文件的复制操作:

文件字节输入输出流的应用

                        图 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);

}

}

我们可以看到,这个题目中的大部分代码都已给出,而我们要做的就是在其中的(完善代码)部分键入代码,完成这个程序。

左下角翻页


做棵大树 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明文件字节输入输出流的应用
喜欢 (2)
[欢迎投币]
分享 (0)
关于作者:
一个整天无所事事的,有时候忽然热血的孩子
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 文章不错,就是代码的格式不太好看,望改进
    你猜我是谁2017-05-05 22:44 回复 未知操作系统 | 未知浏览器