Java I/O学习——File
生活随笔
收集整理的這篇文章主要介紹了
Java I/O学习——File
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
File我們出看可能會根據字面意思理解為文件,其實它既代表文件又代表目錄。
這里有一個例子可以列出指定目錄下的所有文件或目錄, 以及我們可以過濾得到我們想要的文件
import java.io.File; import java.io.FilenameFilter; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.regex.Pattern;class DirFilter implements FilenameFilter{private Pattern pattern;public DirFilter(String regex){pattern = Pattern.compile(regex);}@Overridepublic boolean accept(File dir, String name) {return pattern.matcher(name).matches();}} public class Test{public static void main(String[] args) {File path = new File("/home/estar/Test");String[] list = path.list();System.out.println("輸出全部文件或目錄:");for (String s : list) {System.out.println(s);}System.out.println("輸出以.java結尾的文件或目錄");list = path.list(new DirFilter(".*\\.java")); //只列出以.java結尾的文件for (String s : list) {System.out.println(s);}System.out.println("匿名內部類實現");list = path.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {Pattern pattern = Pattern.compile(".*\\.java");return pattern.matcher(name).matches();}});for (String s : list) {System.out.println(s);}} } 輸出: 輸出全部文件或目錄: a.java cd e.txt b.java c.java d.java 輸出以.java結尾的文件或目錄 a.java b.java c.java d.java 匿名內部類實現 a.java b.java c.java d.java
?更加實用的工具類:
import java.io.File; import java.io.FilenameFilter; import java.io.ObjectInputStream.GetField; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.regex.Pattern;class FileUtils{//獲得本地指定目錄下的,指定格式的目錄列表public static File[] local(File dir, final String regex) {return dir.listFiles(new FilenameFilter() {Pattern pattern = Pattern.compile(regex);@Overridepublic boolean accept(File dir, String name) {return pattern.matcher(new File(name).getName()).matches();}});}public static File[] local(String dir, String name) {return local(new File(dir), name);}public static class TreeInfo implements Iterable<File> {List<File> files = new ArrayList<File>();List<File> dirs = new ArrayList<File>();public void addAll(TreeInfo info) {files.addAll(info.files);dirs.addAll(info.dirs);}@Overridepublic Iterator<File> iterator() {return files.iterator();}@Overridepublic String toString() {return files.toString() + "\n" + dirs.toString();}}//得到所有目錄public static TreeInfo getInfo(String path, String regex) {return recurseDirs(new File(path), regex);}public static TreeInfo getInfo(File path, String regex) {return recurseDirs(path, regex);}public static TreeInfo getInfo(String path) {return recurseDirs(new File(path), ".*");}public static TreeInfo getInfo(File path) {return recurseDirs(path, ".*");}//遞歸調用然后獲得信息public static TreeInfo recurseDirs(File startDir, String regex){TreeInfo result = new TreeInfo();for (File item : startDir.listFiles()) {if (item.isDirectory()) {result.dirs.add(item);result.addAll(recurseDirs(item, regex));} else {//System.out.println("item : = " + item);if (item.getName().matches(regex)) {result.files.add(item);}}}return result;} } public class Test{public static void main(String[] args) {System.out.println(Arrays.asList(FileUtils.local(new File("/home/estar/Test"), ".*\\.java")));System.out.println("指定目錄下的所有目錄:");System.out.println(FileUtils.getInfo(new File("/home/estar/Test")).dirs);System.out.println("指定目錄下的所有文件:");System.out.println(FileUtils.getInfo("/home/estar/Test").files);System.out.println("指定目錄下的所有內容:");System.out.println(FileUtils.getInfo("/home/estar/Test"));System.out.println("指定目錄下的,特定文件:");System.out.println(FileUtils.getInfo(new File("/home/estar/Test"), ".*\\.java").files);} }輸出: [/home/estar/Test/a.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java] 指定目錄下的所有目錄: [/home/estar/Test/cd] 指定目錄下的所有文件: [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java] 指定目錄下的所有內容: [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java] [/home/estar/Test/cd] 指定目錄下的,特定文件: [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
?
總結
以上是生活随笔為你收集整理的Java I/O学习——File的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TX Text Control文字处理教
- 下一篇: opengl 教程(18) 漫反射光