(集合)JAVA文件操作--复制、粘贴、删除、剪切

来源:互联网 发布:越南古代服饰淘宝 编辑:程序博客网 时间:2024/06/08 04:37

原文链接:

http://xqjay19910131-yahoo-cn.iteye.com/blog/1294119


package com.file;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/* * Java实现文件复制、剪切、删除操作 * 文件指文件或文件夹 * 文件分割符统一用"//" */public class FileOperateDemo {/** * 复制文件或文件夹 *  * @param srcPath * @param destDir *            目标文件所在的目录 * @return */public static boolean copyGeneralFile(String srcPath, String destDir) {boolean flag = false;File file = new File(srcPath);if (!file.exists()) {System.out.println("源文件或源文件夹不存在!");return false;}if (file.isFile()) { // 源文件System.out.println("下面进行文件复制!");flag = copyFile(srcPath, destDir);} else if (file.isDirectory()) {System.out.println("下面进行文件夹复制!");flag = copyDirectory(srcPath, destDir);}return flag;}/** * 复制文件 *  * @param srcPath *            源文件绝对路径 * @param destDir *            目标文件所在目录 * @return boolean */private static boolean copyFile(String srcPath, String destDir) {boolean flag = false;File srcFile = new File(srcPath);if (!srcFile.exists()) { // 源文件不存在System.out.println("源文件不存在");return false;}// 获取待复制文件的文件名String fileName = srcPath.substring(srcPath.lastIndexOf(File.separator));String destPath = destDir + fileName;if (destPath.equals(srcPath)) { // 源文件路径和目标文件路径重复System.out.println("源文件路径和目标文件路径重复!");return false;}File destFile = new File(destPath);if (destFile.exists() && destFile.isFile()) { // 该路径下已经有一个同名文件System.out.println("目标目录下已有同名文件!");return false;}File destFileDir = new File(destDir);destFileDir.mkdirs();try {FileInputStream fis = new FileInputStream(srcPath);FileOutputStream fos = new FileOutputStream(destFile);byte[] buf = new byte[1024];int c;while ((c = fis.read(buf)) != -1) {fos.write(buf, 0, c);}fis.close();fos.close();flag = true;} catch (IOException e) {//}if (flag) {System.out.println("复制文件成功!");}return flag;}/** *  * @param srcPath *            源文件夹路径 * @param destPath *            目标文件夹所在目录 * @return */private static boolean copyDirectory(String srcPath, String destDir) {System.out.println("复制文件夹开始!");boolean flag = false;File srcFile = new File(srcPath);if (!srcFile.exists()) { // 源文件夹不存在System.out.println("源文件夹不存在");return false;}// 获得待复制的文件夹的名字,比如待复制的文件夹为"E://dir"则获取的名字为"dir"String dirName = getDirName(srcPath);// 目标文件夹的完整路径String destPath = destDir + File.separator + dirName;// System.out.println("目标文件夹的完整路径为:" + destPath);if (destPath.equals(srcPath)) {System.out.println("目标文件夹与源文件夹重复");return false;}File destDirFile = new File(destPath);if (destDirFile.exists()) { // 目标位置有一个同名文件夹System.out.println("目标位置已有同名文件夹!");return false;}destDirFile.mkdirs(); // 生成目录File[] fileList = srcFile.listFiles(); // 获取源文件夹下的子文件和子文件夹if (fileList.length == 0) { // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久flag = true;} else {for (File temp : fileList) {if (temp.isFile()) { // 文件flag = copyFile(temp.getAbsolutePath(), destPath);} else if (temp.isDirectory()) { // 文件夹flag = copyDirectory(temp.getAbsolutePath(), destPath);}if (!flag) {break;}}}if (flag) {System.out.println("复制文件夹成功!");}return flag;}/** * 获取待复制文件夹的文件夹名 *  * @param dir * @return String */private static String getDirName(String dir) {if (dir.endsWith(File.separator)) { // 如果文件夹路径以"//"结尾,则先去除末尾的"//"dir = dir.substring(0, dir.lastIndexOf(File.separator));}return dir.substring(dir.lastIndexOf(File.separator) + 1);}/** * 删除文件或文件夹 *  * @param path *            待删除的文件的绝对路径 * @return boolean */public static boolean deleteGeneralFile(String path) {boolean flag = false;File file = new File(path);if (!file.exists()) { // 文件不存在System.out.println("要删除的文件不存在!");}if (file.isDirectory()) { // 如果是目录,则单独处理flag = deleteDirectory(file.getAbsolutePath());} else if (file.isFile()) {flag = deleteFile(file);}if (flag) {System.out.println("删除文件或文件夹成功!");}return flag;}/** * 删除文件 *  * @param file * @return boolean */private static boolean deleteFile(File file) {return file.delete();}/** * 删除目录及其下面的所有子文件和子文件夹,注意一个目录下如果还有其他文件或文件夹 * 则直接调用delete方法是不行的,必须待其子文件和子文件夹完全删除了才能够调用delete *  * @param path *            path为该目录的路径 */private static boolean deleteDirectory(String path) {boolean flag = true;File dirFile = new File(path);if (!dirFile.isDirectory()) {return flag;}File[] files = dirFile.listFiles();for (File file : files) { // 删除该文件夹下的文件和文件夹// Delete file.if (file.isFile()) {flag = deleteFile(file);} else if (file.isDirectory()) {// Delete folderflag = deleteDirectory(file.getAbsolutePath());}if (!flag) { // 只要有一个失败就立刻不再继续break;}}flag = dirFile.delete(); // 删除空目录return flag;}/** * 由上面方法延伸出剪切方法:复制+删除 *  * @param destDir *            同上 */public static boolean cutGeneralFile(String srcPath, String destDir) {if (!copyGeneralFile(srcPath, destDir)) {System.out.println("复制失败导致剪切失败!");return false;}if (!deleteGeneralFile(srcPath)) {System.out.println("删除源文件(文件夹)失败导致剪切失败!");return false;}System.out.println("剪切成功!");return true;}public static void main(String[] args) {copyGeneralFile("E://Assemble.txt", "E://New.txt"); // 复制文件copyGeneralFile("E://hello", "E://world"); // 复制文件夹deleteGeneralFile("E://onlinestockdb.sql"); // 删除文件deleteGeneralFile("E://woman"); // 删除文件夹cutGeneralFile("E://hello", "E://world"); // 剪切文件夹cutGeneralFile("E://Difficult.java", "E://Cow//"); // 剪切文件}}


====================================================================================================================================

原文链接:

http://blog.csdn.net/baolong47/article/details/6740383


 闲来无事,突发奇想,看似简单的ctrl+c  和ctrl+paste  如何用java来实现呢。

 

    当我们桥下键盘的 ctrl+c  和ctrl+paste 时,系统就会往剪贴板存入数据。数据可以是文本,图像,文件等。就像我们把图片粘贴到QQ窗口,就会出现图像。

 

      本文只是一个引子,实现了文本和图像的复制粘贴,但却卡在了文件的复制粘贴上。望能得到高人指点,感激涕零,叩头膜拜~~☺

 

少说废话,上代码,注释在代码里了。

 

(一)文本的复制粘贴

[java] view plaincopy
  1. import java.awt.Toolkit;  
  2. import java.awt.datatransfer.Clipboard;  
  3. import java.awt.datatransfer.DataFlavor;  
  4. import java.awt.datatransfer.StringSelection;  
  5. import java.awt.datatransfer.UnsupportedFlavorException;  
  6. import java.io.IOException;  
  7.   
  8.   
  9.   
  10. public class CopyAndPaste {  
  11.     public static void main(String[] args) {  
  12.         //copy();   //可以 在键盘上 ctrl + v  
  13.         paste();  
  14.     }  
  15.       
  16.     public static void copy(){  
  17.         Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  //得到系统剪贴板  
  18.         String text = "这是要拷贝的内容";  
  19.         StringSelection selection = new StringSelection(text);  
  20.         clipboard.setContents(selection, null);  
  21.     }  
  22.       
  23.     public static void paste(){  
  24.         Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  
  25.         DataFlavor flavor = DataFlavor.stringFlavor;  
  26.         if(clipboard.isDataFlavorAvailable(flavor)){//是否符合剪贴板的数据类型  
  27.             try {  
  28.                 System.out.println("此时剪贴版的数据是:" + clipboard.getData(flavor));  
  29.             } catch (UnsupportedFlavorException e) {  
  30.                 e.printStackTrace();  
  31.             } catch (IOException e) {  
  32.                 e.printStackTrace();  
  33.             }  
  34.         }  
  35.     }  
  36. }  


 

(二)图像复制粘贴,做了一个UI,对面板分别有 复制、粘贴、清除图像的操作。

[java] view plaincopy
  1. import java.io.*;  
  2. import java.awt.*;  
  3. import java.awt.datatransfer.*;  
  4. import java.awt.event.*;  
  5. import java.awt.image.*;  
  6. import javax.swing.*;  
  7.   
  8. public class ImageTransferTest  
  9. {  
  10.    public static void main(String[] args)  
  11.    {  
  12.       EventQueue.invokeLater(new Runnable()   //awt线程模式,保证事件处理的稳定性  
  13.          {  
  14.             public void run()  
  15.             {  
  16.                JFrame frame = new ImageTransferFrame();  
  17.                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  18.                frame.setVisible(true);  
  19.             }  
  20.          });  
  21.    }  
  22. }  
  23.   
  24. /** 
  25.  * 图像面板 
  26.  */  
  27. class ImageTransferFrame extends JFrame  
  28. {  
  29.    public ImageTransferFrame()  
  30.    {  
  31.       setTitle("复制粘贴image");     //标题  
  32.       setSize(600600);//  长宽  
  33.       int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;  
  34.       int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;  
  35.       setLocation((screen_width - getWidth()) / 2,  
  36.                 (screen_height - getHeight()) / 2);    //坐标  
  37.   
  38.       label = new JLabel();  
  39.       //绘制图像  
  40.       image = new BufferedImage(DEFAULT_WIDTH, DEFAULT_HEIGHT, BufferedImage.TYPE_INT_ARGB);  
  41.       Graphics g = image.getGraphics();  
  42.       g.setColor(Color.WHITE);  
  43.       g.fillRect(00, DEFAULT_WIDTH, DEFAULT_HEIGHT);  
  44.       g.setColor(Color.RED);  
  45.       g.fillOval(DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 2, DEFAULT_HEIGHT / 2);  
  46.   
  47.       label.setIcon(new ImageIcon(image));  
  48.       add(new JScrollPane(label), BorderLayout.CENTER);  
  49.       JPanel panel = new JPanel();  
  50.   
  51.       JButton copyButton = new JButton("Copy");  
  52.       panel.add(copyButton);  
  53.       copyButton.addActionListener(new ActionListener()  
  54.          {  
  55.             public void actionPerformed(ActionEvent event)  
  56.             {  
  57.                copy();//复制  
  58.             }  
  59.          });  
  60.   
  61.       JButton pasteButton = new JButton("Paste");  
  62.       panel.add(pasteButton);  
  63.       pasteButton.addActionListener(new ActionListener()  
  64.          {  
  65.             public void actionPerformed(ActionEvent event)  
  66.             {  
  67.                paste();  //粘贴  
  68.             }  
  69.          });  
  70.         
  71.       JButton clearButton = new JButton("clear");  
  72.       panel.add(clearButton);  
  73.       clearButton.addActionListener(new ActionListener()  
  74.          {  
  75.             public void actionPerformed(ActionEvent event)  
  76.             {  
  77.                clear();   //清除  
  78.             }  
  79.          });  
  80.   
  81.       add(panel, BorderLayout.SOUTH);  
  82.    }  
  83.      
  84.      
  85.    public void clear(){  
  86.        label.setIcon(null);  
  87.    }  
  88.      
  89.    /** 
  90.     * 复制图像到系统的剪贴板 
  91.     */  
  92.    private void copy()  
  93.    {  
  94.       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板  
  95.       ImageTransferable selection = new ImageTransferable(image);  //图像通道  
  96.       clipboard.setContents(selection, null);  
  97.    }  
  98.   
  99.    /** 
  100.     * 粘贴图像到系统的剪贴板 
  101.     */  
  102.    private void paste()  
  103.    {  
  104.       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  //得到系统剪贴板  
  105.       DataFlavor flavor = DataFlavor.imageFlavor;   //得到数据  
  106.       if (clipboard.isDataFlavorAvailable(flavor))   //判断剪贴板是否支持  复制的数据类型  
  107.       {  
  108.          try  
  109.          {  
  110.             image = (Image) clipboard.getData(flavor);  
  111.             label.setIcon(new ImageIcon(image));  
  112.          }  
  113.          catch (UnsupportedFlavorException exception)  
  114.          {  
  115.             JOptionPane.showMessageDialog(this, exception);  
  116.          }  
  117.          catch (IOException exception)  
  118.          {  
  119.             JOptionPane.showMessageDialog(this, exception);  
  120.          }  
  121.       }  
  122.    }  
  123.   
  124.    private JLabel label;  
  125.    private Image image;  
  126.   
  127.    private static final int DEFAULT_WIDTH = 600;  
  128.    private static final int DEFAULT_HEIGHT = 600;  
  129. }  
  130.   
  131. /** 
  132.  * 实现图像通信的管道接口. 
  133.  */  
  134. class ImageTransferable implements Transferable  
  135. {  
  136.    public ImageTransferable(Image image)  
  137.    {  
  138.       theImage = image;  
  139.    }  
  140.   
  141.    public DataFlavor[] getTransferDataFlavors()  
  142.    {  
  143.       return new DataFlavor[] { DataFlavor.imageFlavor };  
  144.    }  
  145.   
  146.    public boolean isDataFlavorSupported(DataFlavor flavor)  
  147.    {  
  148.       return flavor.equals(DataFlavor.imageFlavor);  
  149.    }  
  150.   
  151.    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException  
  152.    {  
  153.       if (flavor.equals(DataFlavor.imageFlavor))  
  154.       {  
  155.          return theImage;  
  156.       }  
  157.       else  
  158.       {  
  159.          throw new UnsupportedFlavorException(flavor);  
  160.       }  
  161.    }  
  162.   
  163.    private Image theImage;  
  164. }  


0 0
原创粉丝点击