IO文件管理
来源:互联网 发布:淘宝怎么看确认收货 编辑:程序博客网 时间:2024/04/30 11:55
最近写了一个有关文件拷贝,删除,添加,以及关键字替换。
图形如下:
其中需要注意几点:
- 文件操作与文件夹操作略有不同。文件可以直接处理,而文件夹需要遍历它的子文件(file.listFiles())。
- 流不能帮我们创建根文件夹。我们自己创建(file.mkdirs())。
- 一个文件夹的路径不能用来创建一个文件(后缀名不一样)。我们可以选择在文件夹路径末端添加要创建的文件的名字,即根据文件夹路径创建它的子文件(new File(destFile, name))。
public void copyFolder(File srcFile, File destFile) { if (srcFile != null && srcFile.exists()) { // 保证了数据的合法性 if (srcFile.isDirectory()) { // 判断是文件还是目录 if (!destFile.exists()) { // 流不能帮我们创建根文件夹 destFile.mkdirs(); // 可能不存在的根文件夹有多个 } else { File[] listFiles = srcFile.listFiles(); // 遍历文件夹底下的目录,得到他的子文件 for (File file : listFiles) { String name = file.getName(); File newFile = new File(destFile, name); // 目标文件路径发生变化,因为源文件已经开始遍历走向底层 copyFolder(newFile, destFile); // 一定是调用用自己 } } } else { copyFile(srcFile, destFile); } } }
4.文件读取可能会出现乱码问题(BufferedReader),因为我的ecl文件是gbk的 ,所以项目也应该对应是gbk。
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "gbk"));
5.源码:
package io;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class copy_file { /** * 文件的拷贝 函数的重载 * * @param src * 源路径 * @param dec * 目的路径 */ public void copyFile(String src, String dec) { copyFolder(new File(src), new File(dec)); // 把路径变成文件 } /** * 文件拷贝 * * @param srcFile * 源文件 * @param decFile * 目的文件 */ public void copyFile(File srcFile, File decFile) { FileInputStream fis = null; // 定义 FileOutputStream bis = null; try { fis = new FileInputStream(srcFile); // 初始化 bis = new FileOutputStream(decFile); byte[] re = new byte[1024]; // 数组长度最好为1024,2048,(即1024的倍数) int sum = fis.read(re); // 返回的是有效的字节数,当读到文件末尾,返回-1 while (sum != -1) { bis.write(re, 0, sum); // 防止写入非有效的字节 sum = fis.read(re); // sum一定要重新赋值 不然死循环了 } } catch (Exception e) { e.printStackTrace(); } finally { // 各种异常导致的无法关流,正确的关流操作 try { if (bis != null) { // 避免了空指针异常 bis.close(); } } catch (IOException e) { e.printStackTrace(); bis = null; // 赋值为null,交给gc处理 } try { if (fis != null) { // 避免了空指针异常 fis.close(); } } catch (IOException e) { e.printStackTrace(); fis = null; // 赋值为null,交给gc处理 } } } /** * 拷贝文件夹 * * @param srcFile * 源文件 * @param destFile * 目的文件 */ public void copyFolder(File srcFile, File destFile) { if (srcFile != null && srcFile.exists()) { // 保证了数据的合法性 if (srcFile.isDirectory()) { // 判断是文件还是目录 if (!destFile.exists()) { // 流不能帮我们创建根文件夹 destFile.mkdirs(); // 可能不存在的根文件夹有多个 } else { File[] listFiles = srcFile.listFiles(); // 遍历文件夹底下的目录,得到 // 他的子文件 for (File file : listFiles) { String name = file.getName(); File newFile = new File(destFile, name); // 目标文件路径发生变化,因为源文件已经开始遍历走向底层 copyFolder(newFile, destFile); // 一定是调用用自己 } } } else { copyFile(srcFile, destFile); } } }}package io;import java.io.File;import javax.swing.JOptionPane;public class DeleteFile { /** * 函数重载 删除源文件 * * @param srcPath * 源路径 */ public void delete(String srcPath) { File file = new File(srcPath); // 把路径变成文件 delete(file); } /** * 文件夹删除 * * @param srcFile * 源文件 */ public void delete(File srcFile) { if (srcFile != null && srcFile.exists()) { if (srcFile.isDirectory()) { File[] listFiles = srcFile.listFiles(); // 文件夹遍历,得到他的子文件夹 if (listFiles.length != 0) { for (int i = 0; i < listFiles.length; i++) { File file = listFiles[i]; delete(file); } } srcFile.delete(); } else { srcFile.delete(); } JOptionPane.showMessageDialog(null, "文件已成功删除"); } else { JOptionPane.showMessageDialog(null, "此文件不存在"); } }}package io;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextArea;public class Jframe extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; JFrame frame = new JFrame("io"); JLabel copyLabel = new JLabel("文件拷贝:"); JLabel srcPathLabel = new JLabel("源路径:"); JTextArea srcText = new JTextArea(); JLabel desPathLabel = new JLabel("目标路径:"); JTextArea desText = new JTextArea(); JTextArea keyText1 = new JTextArea(); JLabel exchangeLabel = new JLabel(" 转成"); JTextArea keyText2 = new JTextArea(); JButton copyButton = new JButton("拷贝"); JButton choseBtn1 = new JButton("选择"); JButton choseBtn2 = new JButton("选择"); JButton choseBtn3 = new JButton("选择"); JLabel deleteLabel = new JLabel("文件删除:"); JLabel pathLabel = new JLabel("路径"); JTextArea deleteText = new JTextArea(); JButton deleteButton = new JButton("删除"); JLabel saveLabel = new JLabel("文件保存:"); JLabel srcLabel = new JLabel("目的路径:"); JTextArea saveText = new JTextArea(); JLabel messageLabel = new JLabel("添加内容:"); JTextArea messageText = new JTextArea(); JButton saveButton = new JButton("保存"); /** * 画界面 */ private void init() { frame.setSize(405, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); copyLabel.setLocation(5, 5); copyLabel.setSize(60, 20); frame.add(copyLabel); srcPathLabel.setLocation(5, 30); srcPathLabel.setSize(60, 20); frame.add(srcPathLabel); srcText.setLocation(70, 30); srcText.setSize(250, 20); frame.add(srcText); choseBtn1.setLocation(325, 30); choseBtn1.setSize(60, 20); frame.add(choseBtn1); choseBtn1.addActionListener(this); desPathLabel.setLocation(5, 55); desPathLabel.setSize(60, 20); frame.add(desPathLabel); desText.setLocation(70, 55); desText.setSize(250, 20); frame.add(desText); choseBtn2.setLocation(325, 55); choseBtn2.setSize(60, 20); frame.add(choseBtn2); choseBtn2.addActionListener(this); keyText1.setLocation(45, 80); keyText1.setSize(120, 20); frame.add(keyText1); exchangeLabel.setLocation(170, 80); exchangeLabel.setSize(60, 20); frame.add(exchangeLabel); keyText2.setLocation(235, 80); keyText2.setSize(120, 20); frame.add(keyText2); copyButton.setLocation(170, 105); copyButton.setSize(60, 20); frame.add(copyButton); copyButton.addActionListener(this); deleteLabel.setLocation(5, 130); deleteLabel.setSize(60, 20); frame.add(deleteLabel); pathLabel.setLocation(5, 135); pathLabel.setSize(60, 20); frame.add(copyLabel); deleteText.setLocation(70, 135); deleteText.setSize(250, 20); frame.add(deleteText); deleteButton.setLocation(170, 160); deleteButton.setSize(60, 20); frame.add(deleteButton); deleteButton.addActionListener(this); saveLabel.setLocation(5, 185); saveLabel.setSize(60, 20); frame.add(saveLabel); srcLabel.setLocation(5, 210); srcLabel.setSize(60, 20); frame.add(srcLabel); saveText.setLocation(70, 210); saveText.setSize(250, 20); frame.add(saveText); choseBtn3.setLocation(325, 210); choseBtn3.setSize(60, 20); frame.add(choseBtn3); choseBtn3.addActionListener(this); messageLabel.setLocation(5, 235); messageLabel.setSize(60, 20); frame.add(messageLabel); messageText.setLocation(70, 235); messageText.setSize(250, 20); frame.add(messageText); saveButton.setLocation(325, 235); saveButton.setSize(60, 20); frame.add(saveButton); saveButton.addActionListener(this); frame.setVisible(true); } /** * 程序入口 * * @param args */ public static void main(String[] args) { Jframe frame = new Jframe(); frame.init(); } /** * 所有的按钮的监听 */ public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == copyButton) { // 。getSource()表示按钮上你给他起的名字 copy_file copy = new copy_file(); KeyExchange change = new KeyExchange(); copy.copyFile(srcText.getText(), desText.getText()); change.exchange(keyText1.getText(), keyText2.getText(), srcText.getText(), desText.getText()); } if (arg0.getSource() == deleteButton) { DeleteFile delete = new DeleteFile(); delete.delete(deleteText.getText()); } if (arg0.getSource() == saveButton) { SaveFile save = new SaveFile(); save.save(saveText.getText(), messageText.getText()); } if (arg0.getSource() == choseBtn1) { JFileChooser fileChooser = new JFileChooser( "C:\\Users\\Administrator\\Desktop\\123.txt"); fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); fileChooser.showDialog(null, "选择"); File selectFile = fileChooser.getSelectedFile(); if (selectFile != null) { srcText.setText(selectFile.getPath()); } } if (arg0.getSource() == choseBtn2) { JFileChooser fileChooser = new JFileChooser( "C:\\Users\\Administrator\\Desktop\\456.txt"); fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); fileChooser.showDialog(null, "选择"); File selectFile = fileChooser.getSelectedFile(); if (selectFile != null) { desText.setText(selectFile.getPath()); } } if (arg0.getSource() == choseBtn3) { JFileChooser fileChooser = new JFileChooser( "C:\\Users\\Administrator\\Desktop\\456.txt"); fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); fileChooser.showDialog(null, "选择"); File selectFile = fileChooser.getSelectedFile(); if (selectFile != null) { saveText.setText(selectFile.getPath()); } } }}package io;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import javax.swing.JOptionPane;public class KeyExchange { /** * 文件中关键字替换 * * @param src * 原关键字 * @param des * 目的关键字 * @param srcPath * 源路径 * @param desPath * 目的路径 */ public void exchange(String src, String des, String srcPath, String desPath) { File desfile = new File(desPath); File srcfile = new File(srcPath); exchangeFolder(src, des, srcfile, desfile); } /** * 文件中关键字替换 * * @param src * 原关键字 * @param des * 目的关键字 * @param srcfile * 源路径 * @param desfile * 目的路径 */ private void exchange(String src, String des, File srcfile, File desfile) { BufferedReader br = null; BufferedWriter os = null; try { FileInputStream fis = new FileInputStream(srcfile); FileOutputStream fos = new FileOutputStream(desfile); br = new BufferedReader(new InputStreamReader(fis, "gbk")); // 防止乱码,因为我文件是gbk的 // , // 所有此处用gbk os = new BufferedWriter(new OutputStreamWriter(fos, "gbk")); String line = null; while ((line = br.readLine()) != null) { if (line.contains(src)) { line = line.replaceAll(src, des); os.write(line); // 替换后的字符串还需要out流写到别的地方 os.newLine(); // 每写完一行就要换一次行 os.flush(); // 刷新一下 // System.out.println(line); } } JOptionPane.showMessageDialog(null, "文件已成功更改"); } catch (Exception e) { e.printStackTrace(); } finally { // 优秀的关流操作 try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); br = null; } try { if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); os = null; } } } /** * 文件夹中关键字替换 * * @param src * 原关键字 * @param des * 目的关键字 * @param srcFile * 源文件 * @param desfile * 目的文件 */ public void exchangeFolder(String src, String des, File srcFile, File desfile) { try { if (srcFile != null && srcFile.exists()) { // 保证数据的合法性 if (srcFile.isDirectory()) { File[] list = srcFile.listFiles(); for (File f : list) { String name = f.getName(); File file = new File(desfile, name); exchangeFolder(src, des, f, file); } } else { exchange(src, des, srcFile, desfile); } } } catch (Exception e) { e.printStackTrace(); } }}package io;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import javax.swing.JOptionPane;public class SaveFile { /** * 编写文件内容 * * @param srcPath * 源路径 * @param message * 录入信息 */ public void save(String srcPath, String message) { File file = new File(srcPath); saveFolder(file, message); } /** * 文件夹保存 * * @param file * 源文件 * @param message * 录入内容 */ public void saveFolder(File file, String message) { if (file != null) { File parentFile = file.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } OutputStream out = null; try { out = new FileOutputStream(file); out.write(message.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { out = null; } } JOptionPane.showMessageDialog(null, "文件已成功保存"); } }}
0 0
- IO文件管理
- ANSI C文件IO管理
- ANSI文件IO管理以及POSIX文件及目录管理
- 简易学生管理系统(IO流、文件、)
- 文件IO(及时关闭文件以释放管理资源)
- IO管理
- 【Java】File类文件管理及IO读写、复制操作
- Java IO File 文件管理 Java编程思想读书笔记
- 6------IO与文件目录管理的简单理解
- 汇编语言学生成绩管理系统——文件IO
- java-IO 文件作为数据库的学生管理系统
- 标准IO, 文件IO
- IO文件
- 文件IO
- IO-文件
- 文件IO
- 文件IO
- 文件IO
- Permutation
- 在java开发过程中什么时候使用ByteArrayInputStream和ByteArrayOuitputStream?
- java.util.List.subList
- LFU与LRU的不同
- 欢迎使用CSDN-markdown编辑器
- IO文件管理
- Java生成随机数工具类,进制之间的转换工具类,获取指定时间,时间格式转换工具类
- linux安装eclipse出现exit code =13时的解决办法
- Java生成随机数工具类,进制之间的转换工具类,获取指定时间,时间格式转换工具类
- php之错误日志(error log)
- Linux内核编译,启动带linux内核的模拟器。
- 安装Notepad++
- java制造死锁
- leecode 解题总结:383. Ransom Note