Java 学习笔记- File I/O - 创建或遍历文件目录
java.nio.file.Files类提供了创建或读取目录的方法,其中创建目录的方法有:
static Path createDirectories(Path dir, FileAttribute<?>... attrs)
1.此方法创建一个目录,如果路径所指的父目录不存在将逐一创建。
2.如果不指定FileAttribute(不指定是指传一个参数dir,而不是两个参数dir和null),创建的目录的属性为文件系统默认的(default)的属性。
3.在创建目录过程中如果该目录下已经存在一个文件和即将要创建的目录同名(文件包含扩展名)将抛出FileAlreadyExistException。
Path path = Paths.get("D:\\360云盘\\javase1111.txt"); Files.createDirectories(path);
如果D:\\360云盘\\下已经存在文件javase1111.txt,则会抛出异常,否则会创建一个名为javase1111.txt的文件夹。
4.如果即将要创建的目录已经存在,此方法不会抛出FileAlreadyExistException
static Path createDirectory(Path dir, FileAttribute<?>... attrs)
1.此方法创建单个目录,如果父目录不存在会抛出NoSuchFileExistException.此点与上述方法不同。
2.关于FileAttribute与上述方法相同。
3.同上方法3.
4. 如果即将要创建的目录已经存在,此抛出FileAlreadyExistException,此点与上述方法不同
创建临时目录的方法:
static PathcreateTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs)
在指定的目录dir下用指定的前缀prefix创建临时目录
static PathcreateTempDirectory(String prefix, FileAttribute<?>... attrs)
在系统默认的临时文件目录下创建指定前缀prefix创建临时目录
static PathcreateTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs)
在指定的目录dir下用指定的前缀prefix,后缀suffix创建临时目录
static PathcreateTempFile(String prefix, String suffix, FileAttribute<?>... attrs)
在系统默认的临时文件目录下创建指定前缀prefix后缀suffix创建临时目录
遍历目录的方法:
1.打印默认文件系统的根目录:
/** * prints the root directories for the default file system */ public static void printRootDirectory() { List<Path> dirs = (List<Path>) FileSystems.getDefault().getRootDirectories(); for (Path name : dirs) { System.err.println(name); } }
2.递归打印目录下的目录和文件用“-”区分级别
/** * print the content of a directory in recursion * * @param path * @throws IOException */ public static void listDirecotryContents(Path path) throws IOException { listDirecotriesInLevel(path, 0); } private static void listDirecotriesInLevel(Path path, int level) throws IOException { StringBuffer nEmpty = new StringBuffer(); for (int i = 0; i < level; i++) { nEmpty.append("-"); } DirectoryStream<Path> stream = Files.newDirectoryStream(path); for (Path file : stream) { System.out.println(nEmpty.toString() + file.getFileName()); if (Files.isDirectory(file)) { listDirecotriesInLevel(file, level + 1); } } }