1. 程式人生 > >I/O--(上)複製資料夾&遞迴&改名

I/O--(上)複製資料夾&遞迴&改名

  • 隨機獲取文字中的名稱,一行一個名稱。

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Random;
    
    /*
     * 要求:文字檔案中儲存了幾個名稱,寫一個程式實現隨機獲取一個名稱。
     */
    public class GetName {
    	public static void main(String[] args) throws IOException {
    		// 把文字檔案中的資料儲存到集合中
    		BufferedReader br = new BufferedReader(new FileReader("Name.txt"));
    		ArrayList<String> array = new ArrayList<String>();
    		String line = null;
    		while ((line = br.readLine()) != null) {
    			array.add(line);
    		}
    		br.close();
    	
    		Random r = new Random();
    		int index = r.nextInt(array.size());
    		
    		String name = array.get(index);
    		System.out.println("名稱為:" + name);
    	}
    }
    
  • 複製單級資料夾

    /*
      要求:複製單極資料夾
     
     資料來源:E:\\Java
     目的地:E:\\JavaTest
    */
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopyFolderDemo {
    	public static void main(String[] args) throws IOException {
    	
    		File srcFolder = new File("E:\\Java");		
    		File destFolder = new File("E:\\JavaTest");
    	
    		if (!destFolder.exists()) {
    			destFolder.mkdir();
    		}
    		
    		File[] fileArray = srcFolder.listFiles();
    		
    		for (File file : fileArray) {
    			
    			String name = file.getName(); 
    			File newFile = new File(destFolder, name); 
    
    			copyFile(file, newFile);
    		}
    	}
    
    	private static void copyFile(File file, File newFile) throws IOException {
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    				file));
    		BufferedOutputStream bos = new BufferedOutputStream(
    				new FileOutputStream(newFile));
    
    		byte[] bys = new byte[1024];
    		int len = 0;
    		while ((len = bis.read(bys)) != -1) {
    			bos.write(bys, 0, len);
    		}
    
    		bos.close();
    		bis.close();
    	}
    }
    
    
  • 複製單級資料夾&改名

    /*for example*/
    /*
    要求:複製指定目錄下的指定資料型別檔案,並修改後綴名。
    指定的檔案是:.java檔案。
    指定的字尾名是:.txt
    指定的目錄是:TestCc
    
    資料來源:E:\\Java\\*.java
    目的地:E:\\Jad\\*.jad
     */
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FilenameFilter;
    import java.io.IOException;
    
    
    public class CopyFolderDemo {
    	public static void main(String[] args) throws IOException {
    		/*File(String pathname) 
    			通過將給定的路徑名字串轉換為抽象路徑名來建立新的File例項。
    		*/
    		File srcFolder = new File("E:\\Java");		
    		File destFolder = new File("E:\\Jad");
    		
    		if (!destFolder.exists()) {
    			destFolder.mkdir();
    		}
    		
    		File[] fileArray = srcFolder.listFiles(new FilenameFilter() {
    			@Override
    			public boolean accept(File dir, String name) {
    				return new File(dir, name).isFile() && name.endsWith(".java");
    			}
    		});
    
    		// 遍歷該File陣列,得到每一個File物件.
    		for (File file : fileArray) {
    
    			/*
    			File(File parent, String child) 
    				從父抽象路徑名和子路徑名字串建立新的 File例項。  
    			File(String pathname) 
    				通過將給定的路徑名字串轉換為抽象路徑名來建立新的 File例項。  
    			File(String parent, String child) 
    				從父路徑名字串和子路徑名字串建立新的 File例項。
    			*/
    
    			String name = file.getName();		
    			File newFile = new File(destFolder, name);
    			copyFile(file, newFile);
    		}
    		
    		//改名遍歷過程.
    		File[] destFileArray = destFolder.listFiles();
    		for (File destFile : destFileArray) {
    			
    			String name =destFile.getName(); //DataTypeDemo.java
    			String newName = name.replace(".java", ".jad");//DataTypeDemo.jad
    			
    			File newFile = new File(destFolder,newName);
    			destFile.renameTo(newFile);
    		}
    		System.out.println("Over!");
    	}
    
    	/*檔案複製函式*/
    	private static void copyFile(File file, File newFile) throws IOException {
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    				file));
    		BufferedOutputStream bos = new BufferedOutputStream(
    				new FileOutputStream(newFile));
    
    		byte[] bys = new byte[1024];
    		int len = 0;
    		while ((len = bis.read(bys)) != -1) {
    			bos.write(bys, 0, len);
    		}
    
    		bos.close();
    		bis.close();
    	}
    }
    
  • 複製多級資料夾

    /*
     *要求:複製多極資料夾.
      資料來源:E:\\JavaTest
     目的地:E:\\
     */
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopyFoldersDemo {
    	public static void main(String[] args) throws IOException {
    	
    		File srcFile = new File("E:\\JavaTest");		
    		File destFile = new File("E:\\");
    		
    		copyFolder(srcFile, destFile);
    	}
    
    	private static void copyFolder(File srcFile, File destFile)
    			throws IOException {
    		
    		if (srcFile.isDirectory()) {			
    			File newFolder = new File(destFile, srcFile.getName());
    			newFolder.mkdir();
    			
    			File[] fileArray = srcFile.listFiles();
    			for (File file : fileArray) {
    				copyFolder(file, newFolder);
    			}
    		} else {			
    			File newFile = new File(destFile, srcFile.getName());
    			copyFile(srcFile, newFile);
    		}
    	}
    
    	private static void copyFile(File srcFile, File newFile) throws IOException {
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    				srcFile));
    		BufferedOutputStream bos = new BufferedOutputStream(
    				new FileOutputStream(newFile));
    
    		byte[] bys = new byte[1024];
    		int len = 0;
    		while ((len = bis.read(bys)) != -1) {
    			bos.write(bys, 0, len);
    		}
    
    		bos.close();
    		bis.close();
    	}
    }