java按指定后缀复制文件并保留原始文件夹路径
Posted fengqixueluo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java按指定后缀复制文件并保留原始文件夹路径相关的知识,希望对你有一定的参考价值。
为了只复制java原代码文件,不要class文件或其他不需要的文件,写的一个java窗口小程序
指定文件后缀,原始文件文件夹路径,目的文件夹路径,如原始路径为,D:\\Projects,目的路径为C:\\User\\ABC\\Desktop\\newProject\\,
要复制.java文件,复制后的路径为C:\\User\\ABC\\Desktop\\newProject\\Projects\\...不改变原路径,只复制.java文件
1 package copyfile; 2 /** 3 * @author ycl 4 * @date 2017年6月9日 下午7:31:18 5 * for copy file by postfix 6 */ 7 8 import java.awt.*; 9 import java.awt.event.*; 10 import java.io.BufferedReader; 11 import java.io.BufferedWriter; 12 import java.io.File; 13 import java.io.FileReader; 14 import java.io.FileWriter; 15 import java.io.Reader; 16 import java.io.Writer; 17 import java.util.ArrayList; 18 import java.util.List; 19 20 import javax.swing.*; 21 import javax.swing.filechooser.FileSystemView; 22 23 import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper; 24 25 public class CopyFile extends JFrame implements ActionListener { 26 /** 27 * 28 */ 29 private static final long serialVersionUID = 1L; 30 JLabel jlblSourcePath; 31 JLabel jlblDestPath; 32 JLabel jlblPostfix; 33 34 JLabel jlblStatu; 35 36 JTextField jtfSourcePath; 37 JTextField jtfDestPath; 38 JTextField jtfPostfix; 39 40 JButton jbSelectSP; 41 JButton jbSelectDP; 42 43 JButton jbOK; 44 45 JPanel jPanel = new JPanel(); 46 List<String> list = new ArrayList<>(); 47 48 public CopyFile() { 49 this.setTitle("Copy File By Postfix"); 50 this.setContentPane(jPanel); 51 this.setLayout(null); 52 this.setBounds(500, 200, 600, 300); 53 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 54 55 Font font = new Font("Courier", Font.ROMAN_BASELINE, 16); 56 jlblSourcePath = new JLabel("Source Path:"); 57 jlblSourcePath.setBounds(10, 10, 100, 20); 58 jlblSourcePath.setFont(font); 59 jPanel.add(jlblSourcePath); 60 61 jlblDestPath = new JLabel("Destination Path:"); 62 jlblDestPath.setBounds(10, 70, 200, 20); 63 jlblDestPath.setFont(font); 64 jPanel.add(jlblDestPath); 65 66 jlblPostfix = new JLabel("postfix"); 67 jlblPostfix.setBounds(320, 10, 100, 20); 68 jlblPostfix.setFont(font); 69 jPanel.add(jlblPostfix); 70 71 jtfSourcePath = new JTextField("select source path"); 72 jtfSourcePath.setBounds(10, 35, 300, 25); 73 jPanel.add(jtfSourcePath); 74 jtfDestPath = new JTextField("select distinction path"); 75 jtfDestPath.setBounds(10, 95, 300, 25); 76 jPanel.add(jtfDestPath); 77 jtfPostfix = new JTextField("java"); // 后缀 78 jtfPostfix.setBounds(320, 35, 80, 25); 79 jPanel.add(jtfPostfix); 80 81 jbSelectSP = new JButton("SELECT"); 82 jbSelectSP.setBounds(410, 35, 100, 25); 83 jPanel.add(jbSelectSP); 84 jbSelectSP.setFont(font); 85 jbSelectSP.addActionListener(this); 86 87 jbSelectDP = new JButton("SELECT"); 88 jbSelectDP.setBounds(320, 95, 190, 25); 89 jPanel.add(jbSelectDP); 90 jbSelectDP.addActionListener(this); 91 jbSelectDP.setFont(font); 92 93 jbOK = new JButton("OK"); 94 jbOK.setBounds(10, 150, 510, 30); 95 jPanel.add(jbOK); 96 jbOK.addActionListener(this); 97 jbOK.setFont(new Font("Courier", Font.BOLD, 20)); 98 jbOK.setForeground(Color.blue); 99 100 101 jlblStatu = new JLabel("CopyRight@2017 By Yin.cl", JLabel.CENTER); 102 jlblStatu.setBounds(10, 197, 520, 25); 103 jPanel.add(jlblStatu); 104 105 this.setVisible(true); 106 this.setResizable(false); 107 108 } 109 110 // get all filePath list from given path 111 public void getFileList(String path, String postfix) { 112 File file = new File(path); 113 postfix = jtfPostfix.getText(); 114 File[] fileList = null; 115 if (file.exists()) { 116 fileList = file.listFiles(); 117 if (fileList != null && fileList.length > 0) { 118 for (File f : fileList) { 119 if (f.isDirectory()) { 120 getFileList(f.getAbsolutePath(), postfix); 121 } else if (f.isFile()) { 122 String[] strArr = f.getName().split("\\\\."); 123 if (strArr[strArr.length - 1].equalsIgnoreCase(postfix)) { 124 list.add(f.getAbsolutePath()); 125 } 126 } 127 } 128 } 129 } else { 130 System.out.println("Given path is not exist!"); 131 } 132 } 133 134 // get select directory path for button select path 135 public String getSelectPath(String title) { 136 int result = 0; 137 String path = null; 138 JFileChooser fileChooser = new JFileChooser(); 139 FileSystemView fsv = FileSystemView.getFileSystemView(); // this is importent 140 fileChooser.setCurrentDirectory(fsv.getHomeDirectory()); 141 fileChooser.setDialogTitle(title); 142 fileChooser.setApproveButtonText("确定"); 143 fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 144 result = fileChooser.showOpenDialog(this); 145 if (JFileChooser.APPROVE_OPTION == result) { 146 path = fileChooser.getSelectedFile().getPath(); 147 } 148 return path; 149 } 150 151 // click buttonOK 152 public void startExec() { 153 String path = jtfSourcePath.getText(); 154 String postfix = jtfPostfix.getText(); 155 list.clear(); //clean pre times fileList 156 getFileList(path, postfix); 157 String dpath = jtfDestPath.getText(); 158 if (list != null) { 159 for (String str : list) { 160 try { 161 Reader r = new FileReader(new File(str)); 162 String tempStr = str.split("\\\\:")[1]; 163 File newFile = new File(dpath + tempStr); 164 if (!newFile.getParentFile().exists()) { 165 newFile.getParentFile().mkdirs(); 166 } 167 Writer w = new FileWriter(newFile); 168 BufferedReader br = new BufferedReader(r); 169 BufferedWriter bw = new BufferedWriter(w); 170 String line = null; 171 while ((line = br.readLine()) != null) { 172 bw.write(line + "\\r\\n"); 173 } 174 bw.close(); 175 w.close(); 176 br.close(); 177 r.close(); 178 } catch (Exception ex) { 179 showMessage(ex.toString()); 180 } 181 } 182 showMessage("--Success--\\n"); 183 } 184 } 185 186 // Check the sourcepath is equals distinationpath 187 public boolean checkPath(String spath, String dpath) { 188 if (spath != null && dpath != null) { 189 if (spath.equalsIgnoreCase(dpath)) { 190 return true; 191 } 192 } 193 return false; 194 } 195 196 // show message 197 public void showMessage(String msg) { 198 JOptionPane.showInternalMessageDialog(jPanel, msg, "Tips", JOptionPane.INFORMATION_MESSAGE); 199 } 200 201 @Override 202 public void actionPerformed(ActionEvent e) { 203 String path = null; 204 if (e.getSource().equals(jbSelectSP)) { 205 path = getSelectPath("Select Source Path"); 206 jtfSourcePath.setText(path); 207 if (checkPath(path, jtfDestPath.getText())) { 208 showMessage("This path is equals the distination path\\n please select another one"); 209 jtfSourcePath.setText(""); 210 211 } 212 } else if (e.getSource().equals(jbSelectDP)) { 213 path = getSelectPath("Select Destination Path"); 214 jtfDestPath.setText(path); 215 if (checkPath(path, jtfSourcePath.getText())) { 216 jtfDestPath.setText(""); 217 showMessage("This path is equals the source path\\n please select another one"); 218 } 219 } else if (e.getSource().equals(jbOK)) { 220 if (jtfSourcePath.getText().isEmpty() || jtfDestPath.getText().isEmpty()) { 221 showMessage("The Folder path is empty,\\nplease check it."); 222 } else { 223 startExec(); 224 } 225 } 226 227 } 228 229 public static void main(String[] args) { 230 try { 231 BeautyEyeLNFHelper.launchBeautyEyeLNF(); 232 UIManager.put("RootPane.setupButtonVisible", false); 233 } catch (Exception e) { 234 e.printStackTrace(); 235 } 236 new CopyFile(); 237 } 238 }
效果图(皮肤jar包名:SwingSets3.jar)>>>
以上是关于java按指定后缀复制文件并保留原始文件夹路径的主要内容,如果未能解决你的问题,请参考以下文章
C#实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名
C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?