Java实战之简单的文件管理器

网友投稿 278 2022-10-27


Java实战之简单的文件管理器

示例图

可以在指定目录下实现文件的创建、文件夹的创建、文件的复制、粘贴、删除、重命名、返回上一级目录、以及不同设备之间文件的发送

完整代码

package com.atguitu.java;

public class FileDemo {

public static void main(String[] args) {

FileSystem fs = new FileSystem();

fs.start();

}

}

package com.atguitu.java;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.File;

import java.io.IOException;

import java.util.Vector;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.ListSelectionModel;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

public class FileSystem {

JFrame frame; // 窗口

Container container; // 创中的容器对象

JPanel jPanel; // 创建面板

JButton btn1; // 创建按钮

JButton btn2;

JButton btn3;

JButton btn4;

JButton btn5;

JButton btn6;

JButton btn7;

JButton btn8;

JList fileList;// 列表框对象

Vector vector = new Vector(); // 列表框内容

String currentPath = "D:\\"; // 当前显示路径

String copyPath = null; // 待拷贝路径

public FileSystem() {

frame = new JFrame("文件管理器");

frame.setBounds(200, 100, 800, 600); // 设置窗口大小和位置

frame.setLayout(new BorderLayout());

container = frame.getContentPane();

jPanel = new JPanel(); // 创建面板

jPanel.setLayout(new FlowLayout(FlowLayout.LEADING));

btn1 = new JButton("创建文件"); // 创建按钮

btn2 = new JButton("创建文件夹");

btn3 = new JButton("复制");

btn4 = new JButton("粘贴");

btn5 = new JButton("删除");

btn6 = new JButton("重命名");

btn7 = new JButton("返回上一级目录");

btn8 = new JButton("发送");

// 添加按钮事件

btn1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("创建文件");

int i = 1;

String temp = currentPath + "newFile" + i + ".txt";

while (new File(temp).exists()) {

i++;

temp = currentPath + "newFile" + i + ".txt";

}

FileUtil.createFile(temp);

refreshFileList();

}

});

btn2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("创建文件夹");

int i = 1;

String temp = currentPath + "newDir" + i;

while (new File(temp).exists()) {

i++;

temp = currentPath + "newFile" + i;

}

FileUtil.createDir(temp);

refreshFileList();

}

});

btn3.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("复制");

if (fileList.getSelectedValue() != null) {

String selectFile = fileList.getSelectedValue().toString();

if (new File(currentPath + selectFile).exists()) {

copyPath = currentPath + selectFile;

}

}

}

});

btn4.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("粘贴");

System.out.println("copyPath:" + copyPath);

System.out.println("currentPath:" + currentPath);

if (copyPath != null) {

if (new File(copyPath).isDirectory()) {

try {

FileUtil.copyDirectiory(copyPath, currentPath);

} catch (IOException e1) {

// TODO 自动生成的 catch 块

e1.printStackTrace();

}

} else if (new File(copyPath).isFile()) {

try {

FileUtil.copyFile(copyPath, currentPath + copyPath.substring(copyPath.lastIndexOf("\\")));

} catch (IOException e1) {

// TODO 自动生成的 catch 块

e1.printStackTrace();

}

}

refreshFileList();

}

}

});

btn5.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("删除");

if (fileList.getSelectedValue() != null) {

String selectFile = fileList.getSelectedValue().toString();

// System.out.println(selectFile == null);

System.out.println(currentPath + selectFile);

if (new File(currentPath + selectFile).exists()) {

FileUtil.deleteFileOrDir(currentPath + selectFile);

refreshFileList();

}

}

}

});

btn6.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("重命名");

if (fileList.getSelectedValue() != null) {

String newName = JOptionPane.showInputDialog("请输入修改的文件名");

if (newName != null) {

String selectFile = fileList.getSelectedValue().toString();

if (new File(currentPath + selectFile).exists()) {

FileUtil.renameFile(currentPath, selectFile, newName);

refreshFileList();

}

}

}

}

});

btn7.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String temp = currentPath.substring(0,

currentPath.substring(0, currentPath.length() - 1).lastIndexOf("\\") + 1);

System.out.println(temp);

File f = new File(temp);

if (f.isDirectory()) {

currentPath = temp;

refreshFileList();

}

}

});

btn8.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// 发送文件

String fileName = (String) fileList.getSelectedValue();

if (fileName != null && fileName.endsWith(".txt")) {

// 弹出输入IP地址的界面

new IPFrame(currentPath + fileName);

}

}

});

// 面板中添加按钮

jPanel.add(btn1);

jPanel.add(uerhRlVlXQbtn2);

jPanel.add(btn3);

jPanel.add(btn4);

jPanel.add(btn8);

jPanel.add(btn5);

jPanel.add(btn6);

jPanel.add(btn7);

jPanel.add(btn8);

container.add(jPanel, BorderLayout.NORTH);

fileList = new JList(vector);

fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

fileList.addListSelectionListener(new ListSelectionListener() {

@Override

public void valueChanged(ListSelectionEvent e) {

// TODO Auto-generated method stub

if (e.getValueIsAdjusting()) {

System.out.println(fileList.getSelectedValue());

}

}

});

fileList.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if (e.getClickCount() == 2) {

String temp = currentPath + fileList.getSelectedValue();

File f = new File(temp);

if (f.isDirectory()) {

currentPath = currentPath + fileList.getSelectedValue();

refreshFileList();

}

}

}

});

container.add(fileList, BorderLayout.CENTER);

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent arg0) {

System.exit(1);

}

});

}

public void refreshFileList() {

fileList.setBorder(BorderFactory.createTitledBorder(currentPath + "文件列表:"));

vector = FileUtil.fileList(currentPath);

fileList.setListData(vector);

}

public void start() {

refreshFileList();

frame.setVisible(true);

//启动接收文件的线程

new ReceiveThread().start();

}

}

package com.atguitu.java;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Vector;

public class FileUtil {

// 创建文件

public static boolean createFile(String destFileName) {

File file = new File(destFileName);

if (file.exists()) {

System.out.println("创建文件" + destFileName + "失败,目标文件已存在!");

return false;

}

if (destFileName.endsWith(File.separator)) {

System.out.println("创建文件" + destFileName + "失败,目标文件错误!");

return false;

}

if (!file.getParentFile().exists()) {

System.out.println("目标文件所在目录不存在,准备创建它!");

if (!file.getParentFile().mkdirs()) {

System.out.println("创建目标文件所在目录失败!");

return false;

}

}

try {

if (file.createNewFile()) {

System.out.println("创建文件" + destFileName + "成功!");

return true;

} else {

System.out.println("创建文件" + destFileName + "失败!");

return false;

}

} catch (IOException e) {

e.printStackTrace();

System.out.println("创建文件" + destFileName + "失败!" + e.getMessage());

return false;

}

}

// 创建文件夹

public static boolean createDir(String destDirName) {

File dir = new File(destDirName);

if (dir.exists()) {

System.out.println("文件夹创建" + destDirName + "失败,目标文件夹已经存在");

return false;

}

if (!destDirName.endsWith(File.separator)) {

destDirName = destDirName + File.separator;

}

if (dir.mkdirs()) {

System.out.println("文件夹创建" + destDirName + "成功!");

return true;

} else {

System.out.println("文件夹创建" + destDirName + "失败!");

return false;

}

}

// 删除文件

public static boolean deleteFileOrDir(String path) {

File dir = new File(path);

boolean success = true;

if (dir.isDirectory()) {

String[] children = dir.list();

for (int i = 0; i < children.length; i++) {

success = deleteFileOrDir(dir.getAbsolutePath()+"\\"+children[i]);

if (!success) {

return false;

}

}

success = dir.delete();

} else {

success = dir.delete();

}

return success;

}

// 复制文件

public static void copyFile(String sPath, String tPath) throws IOException {

File sourceFile = new File(sPath);

File targetFile = new File(tPath);

FileInputStream input = new FileInputStream(sourceFile);

BufferedInputStream inBuff = new BufferedInputStream(input);

FileOutputStream output = new FileOutputStream(targetFile);

BufferedOutputStream outBuff = new BufferedOutputStream(output);

byte[] b = new byte[1024 * 5];

int len;

while ((len = inBuff.read(b)) != -1) {

outBuff.write(b, 0, len);

}

outBuff.flush();

inBuff.close();

outBuff.close();

output.close();

input.close();

}

// 复制文件夹

public static void copyDirectiory(String sDir, String tDir) throws IOException {

(new File(tDir)).mkdirs();

File[] file = (new File(sDir)).listFiles();

for (int i = 0; i < file.length; i++) {

if (file[i].isFile()) {

File sourceFile = file[i];

File targetFile = new File(new File(tDir).getAbsolutePath() + File.separator + file[i].getName());

copyFile(sourceFile.getAbsolutePath(), targetFile.getAbsolutePath());

}

if (file[i].isDirectory()) {

String dir1 = sDir + "/" + file[i].getName();

String dir2 = tDir + "/" + file[i].getName();

copyDirectiory(dir1, dir2);

}

}

}

// 文件重命名

public static void renameFile(String path, String oldname, String newname) {

if (!oldname.equals(newname)) {

File oldfile = new File(path + "/" + oldname);

File newfile = new File(path + "/" + newname);

if (!oldfile.exists()) {

return;

}

if (newfile.exists())

System.out.println(newname + "文件名已经存在!");

else {

oldfile.renameTo(newfile);

}

} else {

System.out.println("文件名未发生改变");

}

}

// 得到文件列表

public static Vector fileList(String path) {

Vector vector = new Vector();

File[] fl = new File(path).listFiles();

for (int i = 0; i < fl.length; i++) {

if (fl[i].isFile()) {

vector.add(fl[i].getName());

}

else if (fl[i].isDirectory()) {

vector.add(fl[i].getName() + "\\");

}

}

return vector;

}

}

package com.atguitu.java;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

public class IPFrame extends JFrame{

private JLabel lblIp;

private JTextField txtIp;

private JButton btnIp;

private JLabel lblMyIp;

private String fileName;

public IPFrame(String fileName) {

this.fileName = fileName;

this.getContentPane().setLayout(null);

lblIp = new JLabel("接收方IP");

this.getContentPane().add(lblIp);

lblIp.setBounds(20, 20, 60, 25);

txtIp = new JTextField();

this.getContentPane().add(txtIp);

txtIp.setBounds(70, 20, 100, 25);

btnIp = new JButton("发送");

this.getContentPane().add(btnIp);

btnIp.setBounds(180, 20, 80, 25);

btnIp.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//点击发送按钮时,会执行此方法

SendThread sendThread = new SendThread(fileName, txtIp.getText());

sendThread.start();

}

});

this.setBounds(200, 100, 350, 140);

this.setVisible(true);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public JLabel getLblIp() {

return lblIp;

}

public void setLblIp(JLabel lblIp) {

this.lblIp = lblIp;

}

public JTextField getTxtIp() {

return txtIp;

}

public void setTxtIp(JTextField txtIp) {

this.txtIp = txtIp;

}

public JButton getBtnIp() {

return btnIp;

}

public void setBtnIp(JButton btnIp) {

this.btnIp = btnIp;

}

public JLabel getLblMyIp() {

return lblMyIp;

}

public void setLblMyIp(JLabel lblMyIp) {

this.lblMyIp = lblMyIp;

}

}

package com.atguitu.java;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class ReceiveThread extends Thread{

@Override

public void run() {

try {

ServerSocket server = new ServerSocket(6687);

System.out.println("ServerSocket启动...");

while (true) {

Socket s = server.accept();

System.out.println("连接成功!");

InputStream inputStream=s.getInputStream();

File file = new File("E:/shiyan.txt");

String fileName = file.getName();

OutputStream outputstream = new FileOutputStream(file);

int length=0;

byte[] buff = new byte[4096];

while((length=inputStream.read(buff))!=-1) {

outputstream.write(buff,0,length);

}

outputstream.close();

inputStream.close();

s.close();

server.close();

System.out.println("文件传输完毕!文件存储名称为:"+fileName);

}

} catch (IOException e) {

e.printStackTrace();

System.out.println("启动失败...");

}

}

}

package com.atguitu.java;

import java.io.*;

import java.net.Socket;

public class SendThread extends Thread{

private String filePath;

private String ipAddress;

public SendThread(String filePath) {

super();

this.filePath = filePath;

}

public SendThread(String filePath, String ipAddress) {

super();

this.filePath = filePath;

this.ipAddress = ipAddress;

}

@Override

public void run() {

try{

File file=new File(filePath);

FileInputStream fileInputstream = new FileInputStream(file);

Socket socket=new Socket(ipAddress, 6687);

OutputStream outputStream=new DataOutputStream(socket.getOutputStream());

if(!file.exists()){

return;

}else{

String fileName = file.getName();

long length = file.length();

int len = 0;

byte[] buff = new byte[4096];

while((len = fileInputstream.read(buff))!=-1) {

outputStream.write(buff,0,len);

}

System.out.println("开始发送文件,文件名称为:"+fileName+" 文件大小"+length);

outputStream.close();

socket.close();

fileInputstream.close();

System.out.println("发送文件完毕!");

}

} catch (IOException e) {

e.printStackTrace();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WLAN 无线网络 11 - 无线网络加密
下一篇:【网络知识点】高级交换技术
相关文章

 发表评论

暂时没有评论,来抢沙发吧~