天天看點

JDK 7的檔案和目錄通路

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/8168023

作者:chszs,轉載需注明。

作者部落格首頁:http://blog.csdn.net/chszs

JDK 7進行檔案樹複制和周遊非常簡單。與JDK 6或更早的版本相比,你會發現使用JDK 7的NIO包很簡單,所需的代碼非常少。

本文用兩個例子展示了JDK 7的檔案I/O機制,java.nio.file包提供了對檔案I/O的支援,可以通路預設的檔案系統。這個包非常直覺,易于使用。

例子所需的工具:

1. JDK 7

2. Eclipse 4.2

在例子中,我們使用java.nio.file.Files所支援的檔案操作。這個類包含了許多靜态方法,比如對檔案和目錄的複制、移動、删除、周遊檔案樹等。

java.nio.file.Path是java.nio.file包的主要的入口點之一。Path類表示檔案系統的路徑。

例1:檔案複制操作

從源檔案複制到目标檔案,使用Files.copy方法。我們還需要提供不同的選項——使用java.nio.file.CopyOption來指定怎樣複制檔案。

CopyOpDemo.java代碼如下:

package test;


import java.io.IOException;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;


public class CopyOpDemo {
	public static void main(String[] args){
		// 待複制的源檔案
		Path srcFile = Paths.get("D:/tmp/test1.htm");
		// 複制後的目标檔案
		Path targetFile = Paths.get("D:/destFile.txt");
		// 複制選項定義
		CopyOption[] options = new CopyOption[]{
			StandardCopyOption.REPLACE_EXISTING
		};
		// 複制檔案
		try {
			Files.copy(srcFile, targetFile, options);
			System.out.println("複制成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}           

作者:chszs,轉載需注明。作者部落格首頁:http://blog.csdn.net/chszs

例2:周遊檔案樹

要周遊檔案樹,使用Files.walkFileTree方法。此方法需要指定根路徑或起始路徑。以及要重寫SimpleFileVisitor的實作類的兩個方法:preVisitDirectory和visitFile。兩個方法定義了在通路目錄和檔案期間想做的事。這使得我們要列印目錄和檔案名就非常簡單了。

RecursiveFileListDemo.java代碼如下:

package test;

import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;


public class RecursiveFileListDemo {
	public static void main(String[] args) throws IOException{
		Path startPath = Paths.get("D:/tmp/s5-blank");
		Files.walkFileTree(startPath, new SimpleFileVisitor<Path>(){
			@Override
			public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs){
				System.out.println(">>>>Dir : " + dir);
				return FileVisitResult.CONTINUE;
			}
			
			@Override
			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){
				System.out.println("File : " + file);
				return FileVisitResult.CONTINUE;
			}
		});
	}
}
           

檔案目錄如下圖所示:

那麼程式執行後,控制台輸出如下:

>>>>Dir : D:\tmp\s5-blank
File : D:\tmp\s5-blank\.DS_Store
File : D:\tmp\s5-blank\s5-blank.html
>>>>Dir : D:\tmp\s5-blank\ui
File : D:\tmp\s5-blank\ui\.DS_Store
>>>>Dir : D:\tmp\s5-blank\ui\default
File : D:\tmp\s5-blank\ui\default\.DS_Store
File : D:\tmp\s5-blank\ui\default\blank.gif
File : D:\tmp\s5-blank\ui\default\bodybg.gif
File : D:\tmp\s5-blank\ui\default\framing.css
File : D:\tmp\s5-blank\ui\default\iepngfix.htc
File : D:\tmp\s5-blank\ui\default\opera.css
File : D:\tmp\s5-blank\ui\default\outline.css
File : D:\tmp\s5-blank\ui\default\pretty.css
File : D:\tmp\s5-blank\ui\default\print.css
File : D:\tmp\s5-blank\ui\default\s5-core.css
File : D:\tmp\s5-blank\ui\default\slides.css
File : D:\tmp\s5-blank\ui\default\slides.js
           

繼續閱讀