1. 程式人生 > >java7 NIO2(4) 檔案和目錄操作API

java7 NIO2(4) 檔案和目錄操作API

檔案和目錄操作API,跟原來FILE IO做了很多改進,我們看看新的API,這個也是NIO操作的基礎。

package com.mime;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.List;
import java.util.Set;

public class NIO2FileAndDir {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Path path = FileSystems.getDefault().getPath(
				System.getProperty("user.home"), "www", "pyweb.settings");
		// 檢查檔案是否存在 exist, not exist, or unknown.
		// !Files.exists(...) is not equivalent to Files.notExists(...) and the
		// notExists() method is not a complement of the exists() method
		// 如果應用沒有許可權訪問這個檔案,則兩者都返回false
		boolean path_exists = Files.exists(path,
				new LinkOption[] { LinkOption.NOFOLLOW_LINKS });
		boolean path_notexists = Files.notExists(path,
				new LinkOption[] { LinkOption.NOFOLLOW_LINKS });
		System.out.println(path_exists);
		System.out.println(path_notexists);

		// 檢測檔案訪問許可權
		boolean is_readable = Files.isReadable(path);
		boolean is_writable = Files.isWritable(path);
		boolean is_executable = Files.isExecutable(path);
		boolean is_regular = Files.isRegularFile(path,
				LinkOption.NOFOLLOW_LINKS);
		if ((is_readable) && (is_writable) && (is_executable) && (is_regular)) {
			System.out.println("The checked file is accessible!");
		} else {
			System.out.println("The checked file is not accessible!");
		}

		// 檢測檔案是否指定同一個檔案
		Path path_1 = FileSystems.getDefault().getPath(
				System.getProperty("user.home"), "www", "pyweb.settings");
		Path path_2 = FileSystems.getDefault().getPath(
				System.getProperty("user.home"), "www", "django.wsgi");
		Path path_3 = FileSystems.getDefault().getPath(
				System.getProperty("user.home"), "software/../www",
				"pyweb.settings");
		try {
			boolean is_same_file_12 = Files.isSameFile(path_1, path_2);
			boolean is_same_file_13 = Files.isSameFile(path_1, path_3);
			boolean is_same_file_23 = Files.isSameFile(path_2, path_3);
			System.out.println("is same file 1&2 ? " + is_same_file_12);
			System.out.println("is same file 1&3 ? " + is_same_file_13);
			System.out.println("is same file 2&3 ? " + is_same_file_23);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 檢測檔案可見行
		try {
			boolean is_hidden = Files.isHidden(path);
			System.out.println("Is hidden ? " + is_hidden);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 獲取檔案系統根目錄
		Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
		for (Path name : dirs) {
			System.out.println(name);
		}
		// jdk6的API
		// File[] roots = File.listRoots();
		// for (File root : roots) {
		// System.out.println(root);
		// }

		// 建立新目錄
		Path newdir = FileSystems.getDefault().getPath("/tmp/aaa");
		// try {
		// Files.createDirectory(newdir);
		// } catch (IOException e) {
		// System.err.println(e);
		// }
		Set<PosixFilePermission> perms = PosixFilePermissions
				.fromString("rwxr-x---");
		FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions
				.asFileAttribute(perms);
		try {
			Files.createDirectory(newdir, attr);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 建立多級目錄,建立bbb目錄,在bbb目錄下再建立ccc目錄等等
		Path newdir2 = FileSystems.getDefault().getPath("/tmp/aaa",
				"/bbb/ccc/ddd");
		try {
			Files.createDirectories(newdir2);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 列舉目錄資訊
		Path newdir3 = FileSystems.getDefault().getPath("/tmp");
		try (DirectoryStream<Path> ds = Files.newDirectoryStream(newdir3)) {
			for (Path file : ds) {
				System.out.println(file.getFileName());
			}
		} catch (IOException e) {
			System.err.println(e);
		}
		// 通過正則表示式過濾
		System.out.println("\nGlob pattern applied:");
		try (DirectoryStream<Path> ds = Files.newDirectoryStream(newdir3,
				"*.{png,jpg,bmp,ini}")) {
			for (Path file : ds) {
				System.out.println(file.getFileName());
			}
		} catch (IOException e) {
			System.err.println(e);
		}

		// 建立新檔案
		Path newfile = FileSystems.getDefault().getPath(
				"/tmp/SonyEricssonOpen.txt");
		Set<PosixFilePermission> perms1 = PosixFilePermissions
				.fromString("rw-------");
		FileAttribute<Set<PosixFilePermission>> attr2 = PosixFilePermissions
				.asFileAttribute(perms1);
		try {
			Files.createFile(newfile, attr2);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 寫小檔案
		try {
			byte[] rf_wiki_byte = "test".getBytes("UTF-8");
			Files.write(newfile, rf_wiki_byte);
		} catch (IOException e) {
			System.err.println(e);
		}

		// 讀小檔案
		try {
			byte[] ballArray = Files.readAllBytes(newfile);
			System.out.println(ballArray.toString());
		} catch (IOException e) {
			System.out.println(e);
		}
		Charset charset = Charset.forName("ISO-8859-1");
		try {
			List<String> lines = Files.readAllLines(newfile, charset);
			for (String line : lines) {
				System.out.println(line);
			}
		} catch (IOException e) {
			System.out.println(e);
		}

		// 讀寫檔案快取流操作
		String text = "\nVamos Rafa!";
		try (BufferedWriter writer = Files.newBufferedWriter(newfile, charset,
				StandardOpenOption.APPEND)) {
			writer.write(text);
		} catch (IOException e) {
			System.err.println(e);
		}
		try (BufferedReader reader = Files.newBufferedReader(newfile, charset)) {
			String line = null;
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			System.err.println(e);
		}

		// 不用快取的輸入輸出流
		String racquet = "Racquet: Babolat AeroPro Drive GT";
		byte data[] = racquet.getBytes();
		try (OutputStream outputStream = Files.newOutputStream(newfile)) {
			outputStream.write(data);
		} catch (IOException e) {
			System.err.println(e);
		}
		String string = "\nString: Babolat RPM Blast 16";
		try (OutputStream outputStream = Files.newOutputStream(newfile,
				StandardOpenOption.APPEND);
				BufferedWriter writer = new BufferedWriter(
						new OutputStreamWriter(outputStream))) {
			writer.write(string);
		} catch (IOException e) {
			System.err.println(e);
		}
		int n;
		try (InputStream in = Files.newInputStream(newfile)) {
			while ((n = in.read()) != -1) {
				System.out.print((char) n);
			}
		} catch (IOException e) {
			System.err.println(e);
		}

		// 臨時目錄操作
		String tmp_dir_prefix = "nio_";
		try {
			// passing null prefix
			Path tmp_1 = Files.createTempDirectory(null);
			System.out.println("TMP: " + tmp_1.toString());
			// set a prefix
			Path tmp_2 = Files.createTempDirectory(tmp_dir_prefix);
			System.out.println("TMP: " + tmp_2.toString());

			// 刪除臨時目錄
			Path basedir = FileSystems.getDefault().getPath("/tmp/aaa");
			Path tmp_dir = Files.createTempDirectory(basedir, tmp_dir_prefix);
			File asFile = tmp_dir.toFile();
			asFile.deleteOnExit();

		} catch (IOException e) {
			System.err.println(e);
		}

		String tmp_file_prefix = "rafa_";
		String tmp_file_sufix = ".txt";
		try {
			// passing null prefix/suffix
			Path tmp_1 = Files.createTempFile(null, null);
			System.out.println("TMP: " + tmp_1.toString());
			// set a prefix and a suffix
			Path tmp_2 = Files.createTempFile(tmp_file_prefix, tmp_file_sufix);
			System.out.println("TMP: " + tmp_2.toString());
			File asFile = tmp_2.toFile();
			asFile.deleteOnExit();

		} catch (IOException e) {
			System.err.println(e);
		}

		// 刪除檔案
		try {
			boolean success = Files.deleteIfExists(newdir2);
			System.out.println("Delete status: " + success);
		} catch (IOException | SecurityException e) {
			System.err.println(e);
		}

		// 拷貝檔案
		Path copy_from = Paths.get("/tmp", "draw_template.txt");
		Path copy_to = Paths
				.get("/tmp/bbb", copy_from.getFileName().toString());
		try {
			Files.copy(copy_from, copy_to);
		} catch (IOException e) {
			System.err.println(e);
		}
		try (InputStream is = new FileInputStream(copy_from.toFile())) {
			Files.copy(is, copy_to);
		} catch (IOException e) {
			System.err.println(e);
		}
		//移動檔案
		Path movefrom = FileSystems.getDefault().getPath(
				"C:/rafaelnadal/rafa_2.jpg");
		Path moveto = FileSystems.getDefault().getPath(
				"C:/rafaelnadal/photos/rafa_2.jpg");
		try {
			Files.move(movefrom, moveto, StandardCopyOption.REPLACE_EXISTING);
		} catch (IOException e) {
			System.err.println(e);
		}

	}

}

輸出:
true
false
The checked file is not accessible!
is same file 1&2 ? false
is same file 1&3 ? true
is same file 2&3 ? false
Is hidden ? false
/
java.nio.file.FileAlreadyExistsException: /tmp/aaa
.ICE-unix
gpg-LOz0cL
.org.chromium.Chromium.YKWsQJ
hsperfdata_weijianzhongwj
kde-weijianzhongwj
pulse-qKcxuRTsGUob
[email protected]
:0.0 scim-helper-manager-socket-weijianzhongwj ksocket-weijianzhongwj virtuoso_Lh2135.ini scim-socket-frontend-weijianzhongwj scim-panel-socket:0-weijianzhongwj .X0-lock pulse-j0jluTvI3Pe6 sni-qt_kaccessibleapp_2026-mEz8Dy .X11-unix akonadi-weijianzhongwj.mjmToI ssh-mfuayNh73d7Q virt_1111 aaa pulse-PKdhtXMmr18n fcitx-socket-:0 Glob pattern applied: [
[email protected]
test test Vamos Rafa! Racquet: Babolat AeroPro Drive GT String: Babolat RPM Blast 16TMP: /tmp/3892364837850046417 TMP: /tmp/nio_5078970948266789689 TMP: /tmp/7342813580436243519.tmp TMP: /tmp/rafa_47993266069276248.txt Delete status: true java.nio.file.NoSuchFileException: /tmp/draw_template.txt java.io.FileNotFoundException: /tmp/draw_template.txt (沒有那個檔案或目錄) java.nio.file.NoSuchFileException: C:/rafaelnadal/rafa_2.jpg


相關推薦

java7 NIO2(4) 檔案目錄操作API

檔案和目錄操作API,跟原來FILE IO做了很多改進,我們看看新的API,這個也是NIO操作的基礎。 package com.mime; import java.io.BufferedReader; import java.io.BufferedWriter; impo

java7 NIO2(5) 檔案目錄操作API

java7 NIO2使用walk遞迴介面遞迴操作檔案,可以使用這個介面進行檔案搜尋,檔案內容搜尋,遞迴拷貝,遞迴移動,遞迴刪除等操作。 package com.mime; import java.io.IOException; import java.nio.file.F

檔案目錄操作相關的函式

獲取檔案資訊: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> // 成功返回0,出錯返回-1 int stat(const char *path, struct stat *b

用os模組進行檔案目錄操作的例項,讀者可以根據需要將每個選項對應的功能獨立 出來在自己的程式中模仿。

#主程式設計了7個使用者選項,使用者選擇不同的選項可以輸出當前路徑下的檔案、改變路徑、 #統計路徑下的檔案數目和總的檔案大小以及查詢指定檔案等操作。 import os,os.path QUIT='7' COMMANDS=('1','2','3','4','5','6','7') ME

Linux下檔案目錄操作命令大全

1、檢視目錄內容 ls 列表顯示目錄內容 萬用字元?單字元 含其一或段[a,b,c-d] *任意 ls -l長格式顯示檔案或目錄資訊 ls -a顯示所有包括隱藏的檔案或目錄 ls -h以K、M、G單位顯示檔案或目錄資訊 ls -d顯示目錄本身屬性資訊 2、建立目錄

linux操作--常用命令-檔案目錄操作命令

1. ls命令  這個命令就相當於 dos下的 dir 命令一樣 也是 Linux控制檯命令中最為重要 幾個命令之一 ls最常用的引數有三個 -a -l和 –F   ls -a  Linux 系統上的檔案以.開頭的檔案被系統視為隱藏檔案 僅用 ls 命令是看不 到他們的 而用

python檔案目錄操作方法大全(含例項)

一、python中對檔案、資料夾操作時經常用到的os模組和shutil模組常用方法。 1.得到當前工作目錄,即當前Python指令碼工作的目錄路徑: os.getcwd() 2.返回指定目錄下的所有檔案和目錄名:os.listdir() 3.函式用來刪除一個檔案:os.rem

從Python中os模組中實用的檔案目錄操作方法到Python內建變數

Python常用檔案和目錄操作函式   序號 方法及描述 1 os.access(path, mode) 檢驗許可權模式 2 os.chdir(path) 改變當前工作目

scala檔案目錄操作

scala檔案 1.讀取行 要讀取檔案的所有行,可以呼叫scala.io.Source物件的getLines方法:import scala.io.Source object HelloWord{ def main(args:Array[String]):Unit =

檔案目錄操作

開啟和關閉檔案fopen、freopen和fclose是ANSI標準庫的一部分。原型:#include <stdio.h>FILE *fopen(const char *path, const char *mode);FILE *freopen(const cha

PHP-檔案目錄操作

目錄操作 建立目錄:mkdir(目錄地址, 許可權, 是否遞迴建立=false); 刪除目錄:rmdir(目錄地址);(僅僅可以刪除空目錄,不支援遞迴刪除) 移動(改名):rename(舊地址, 新地址); 注意:目錄地址用絕對路徑,./或../開頭(windows下直接/開頭不認,li

【Linux】檔案目錄操作——cd、mkdir、rm、cp...

目錄的表示: . 代表此層目錄 .. 代表上一層目錄 - 代表前一個工作目錄 ~ 代表『目前使用者身份』所在的家目錄 ~account 代表 account 這個使用者的家目錄 絕對路徑:從根目錄/開始寫起的路徑; 相對

python的檔案目錄操作

一 獲得當前路徑 1、程式碼1 >>>import os >>>print('Current directory is ',os.getcwd()) Curren

Linux檔案目錄操作命令大全

掛載一個檔案系統  mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經存在  umount /dev/hda2 解除安裝一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出  fuser -km /mnt/hda2

第二章 檔案目錄操作命令

2.1.tree命令:   以樹形結構列出指定目錄下的所有內容,包括所有檔案、子目錄及子目錄裡的目錄和檔案。  tree [option] [directory] -a      顯示所有檔案,包括隱藏檔案(以點(.)開頭的檔案) -d      只顯示目錄* -f       

超全!python的檔案目錄操作總結

檔案的基本讀寫 path = r'C:\Users\Brady\Documents\tmp' with open(path + r'\demo.txt', 'r', encoding='utf-8') as f: content = f.read() print(content) open()函式

python3操作檔案目錄

操作檔案和目錄的函式一部分放在os模組中,一部分放在os.path模組中,這一點要注意一下。檢視、建立和刪除目錄可以這麼呼叫: # 檢視當前目錄的絕對路徑:>>> os.path.abspath('.')'/Users/michael'# 在某個目錄下建立一個新目錄,首先把新目錄的完整路徑

易學筆記-Linux命令-第5章:操作檔案目錄

操作檔案和目錄 萬用字元 *:匹配任意多個字元(包括零個或者多個) [[email protected] ~]# ll -l *  列出所有檔案或者目錄,包括目錄中的子目錄或者子檔案 -rw-r--r--. 1 root root 

Python OS模組之操作檔案目錄

#-*-coding:utf-8-*- import os import shutil ###############OS模組############## #獲得當前python指令碼的工作目錄 os.getcwd() #獲得指定目錄下的所有檔案和目錄名 os.listdir("C:\\")

Linux學習第三天--操作檔案目錄

此時此刻,我們已經準備好了做些真正的工作!這一章節將會介紹以下命令: cp -複製檔案和目錄 mv -移動/重新命名檔案和目錄 mkdir -建立目錄 rm -刪除檔案和目錄 ln -建立硬連結和符號連結 這五個命令屬於最長使用的Linux命