国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

IO文件管理

2019-11-06 08:21:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近寫(xiě)了一個(gè)有關(guān)文件拷貝,刪除,添加,以及關(guān)鍵字替換。

圖形如下: 這里寫(xiě)圖片描述

其中需要注意幾點(diǎn):

文件操作與文件夾操作略有不同。文件可以直接處理,而文件夾需要遍歷它的子文件file.listFiles())。流不能幫我們創(chuàng)建根文件夾。我們自己創(chuàng)建(file.mkdirs())。一個(gè)文件夾的路徑不能用來(lái)創(chuàng)建一個(gè)文件(后綴名不一樣)。我們可以選擇在文件夾路徑末端添加要?jiǎng)?chuàng)建的文件的名字,即根據(jù)文件夾路徑創(chuàng)建它的子文件new File(destFile, name))。public void copyFolder(File srcFile, File destFile) { if (srcFile != null && srcFile.exists()) { // 保證了數(shù)據(jù)的合法性 if (srcFile.isDirectory()) { // 判斷是文件還是目錄 if (!destFile.exists()) { // 流不能幫我們創(chuàng)建根文件夾 destFile.mkdirs(); // 可能不存在的根文件夾有多個(gè) } else { File[] listFiles = srcFile.listFiles(); // 遍歷文件夾底下的目錄,得到他的子文件 for (File file : listFiles) { String name = file.getName(); File newFile = new File(destFile, name); // 目標(biāo)文件路徑發(fā)生變化,因?yàn)樵次募呀?jīng)開(kāi)始遍歷走向底層 copyFolder(newFile, destFile); // 一定是調(diào)用用自己 } } } else { copyFile(srcFile, destFile); } } }

4.文件讀取可能會(huì)出現(xiàn)亂碼問(wèn)題(BufferedReader),因?yàn)槲业膃cl文件是gbk的 ,所以項(xiàng)目也應(yīng)該對(duì)應(yīng)是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 { /** * 文件的拷貝 函數(shù)的重載 * * @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]; // 數(shù)組長(zhǎng)度最好為1024,2048,(即1024的倍數(shù)) int sum = fis.read(re); // 返回的是有效的字節(jié)數(shù),當(dāng)讀到文件末尾,返回-1 while (sum != -1) { bis.write(re, 0, sum); // 防止寫(xiě)入非有效的字節(jié) sum = fis.read(re); // sum一定要重新賦值 不然死循環(huán)了 } } catch (Exception e) { e.PRintStackTrace(); } finally { // 各種異常導(dǎo)致的無(wú)法關(guān)流,正確的關(guān)流操作 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()) { // 保證了數(shù)據(jù)的合法性 if (srcFile.isDirectory()) { // 判斷是文件還是目錄 if (!destFile.exists()) { // 流不能幫我們創(chuàng)建根文件夾 destFile.mkdirs(); // 可能不存在的根文件夾有多個(gè) } else { File[] listFiles = srcFile.listFiles(); // 遍歷文件夾底下的目錄,得到 // 他的子文件 for (File file : listFiles) { String name = file.getName(); File newFile = new File(destFile, name); // 目標(biāo)文件路徑發(fā)生變化,因?yàn)樵次募呀?jīng)開(kāi)始遍歷走向底層 copyFolder(newFile, destFile); // 一定是調(diào)用用自己 } } } else { copyFile(srcFile, destFile); } } }}package io;import java.io.File;import javax.swing.JOptionPane;public class DeleteFile { /** * 函數(shù)重載 刪除源文件 * * @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("目標(biāo)路徑:"); JTextArea desText = new JTextArea(); JTextArea keyText1 = new JTextArea(); JLabel exchangeLabel = new JLabel(" 轉(zhuǎn)成"); 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("添加內(nèi)容:"); JTextArea messageText = new JTextArea(); JButton saveButton = new JButton("保存"); /** * 畫(huà)界面 */ 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(); } /** * 所有的按鈕的監(jiān)聽(tīng) */ 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 { /** * 文件中關(guān)鍵字替換 * * @param src * 原關(guān)鍵字 * @param des * 目的關(guān)鍵字 * @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); } /** * 文件中關(guān)鍵字替換 * * @param src * 原關(guān)鍵字 * @param des * 目的關(guān)鍵字 * @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")); // 防止亂碼,因?yàn)槲椅募莋bk的 // , // 所有此處用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流寫(xiě)到別的地方 os.newLine(); // 每寫(xiě)完一行就要換一次行 os.flush(); // 刷新一下 // System.out.println(line); } } JOptionPane.showMessageDialog(null, "文件已成功更改"); } catch (Exception e) { e.printStackTrace(); } finally { // 優(yōu)秀的關(guān)流操作 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; } } } /** * 文件夾中關(guān)鍵字替換 * * @param src * 原關(guān)鍵字 * @param des * 目的關(guān)鍵字 * @param srcFile * 源文件 * @param desfile * 目的文件 */ public void exchangeFolder(String src, String des, File srcFile, File desfile) { try { if (srcFile != null && srcFile.exists()) { // 保證數(shù)據(jù)的合法性 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 { /** * 編寫(xiě)文件內(nèi)容 * * @param srcPath * 源路徑 * @param message * 錄入信息 */ public void save(String srcPath, String message) { File file = new File(srcPath); saveFolder(file, message); } /** * 文件夾保存 * * @param file * 源文件 * @param message * 錄入內(nèi)容 */ 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, "文件已成功保存"); } }}
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台前县| 普定县| 遂昌县| 泾川县| 临湘市| 邵阳县| 博客| 灌阳县| 阳城县| 上饶县| 特克斯县| 梓潼县| 如东县| 庆安县| 澎湖县| 溧水县| 甘泉县| 兰州市| 临城县| 永德县| 乌拉特中旗| 汉寿县| 巫溪县| 海伦市| 金门县| 鹤峰县| 隆化县| 和平区| 五台县| 德清县| 扶余县| 安仁县| 嘉兴市| 金寨县| 湘潭县| 鄄城县| 昆明市| 延边| 五大连池市| 凌海市| 汝阳县|