第18章 Java IO系统 /18.1 File类/18.1.1 目录列表器
标签: | 作者:易学笔记 更多资料请联系微信或QQ:1776565180 |
- File类
- 概念:既可以代表特定文件的名称,又能代表一个目录下的一组文件的名称
- 举例:查找一个目录列表
- 可以使用不带参数的list( )方法,这样返回全部列表
- 带参照,比如扩展名为.java的文件
- 源代码:
package io;
//: io/DirList.java
//Display a directory listing using regular expressions.
//{Args: "D.*\.java"}
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class DirList {
public static void main(String[] args) {
// . 指的是文件所在的根目录
File path = new File(".");
String[] list;
if (args.length == 0)
//列出所有的文件和目录
list = path.list();
else
{
//System.out.println("xxxx:" + args[0]);
//DirFilter指的是的文件或者目录,args[0] 为过滤正则表达式,如只需要含有“s”的文件名:.*[s].*
list = path.list(new DirFilter(args[0]));
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirItem : list)
System.out.println(dirItem);
System.out.println("字符串分割");
String pattern = ".*[s].*";
String strTeString = new String(".settings .myeclipse bin OK1 src .classpath .project s");
String[] arlist = strTeString.split(" ");
for (int i = 0; i < arlist.length; i++) {
System.out.println(arlist[i] + "=" + arlist[i].matches(pattern));
}
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
} /*
* Output: DirectoryDemo.java DirList.java DirList2.java DirList3.java
*/// :~
- 结果输出:
.classpath
.myeclipse
.settings
src
字符串分割
.settings=true
.myeclipse=true
bin=false
OK1=false
src=true
.classpath=true
.project=false
s=true
- 正则表达式过滤目录
- 源代码:
package io;
//: io/DirectoryDemo.java
//Sample use of Directory utilities.
import java.io.*;
import mypackage.*;
import static mypackage.Print.*;
public class DirectoryDemo {
public static void main(String[] args) {
// All directories:
//只打印目录
//PPrint.pprint(Directory.walk(".").dirs);
// All files beginning with 'T'
//只打印以“T”开头的文件
print("只打印以“T”开头的文件----------------------");
for (File file : Directory.local(".", "T.*"))
print(file + "");
// All Java files beginning with 'T':
//只打印以“T”开头,以“java”结尾的文件
print("只打印以“T”开头,以“java”结尾的文件----------------------");
for (File file : Directory.walk(".", "T.*.java"))
print(file+ "");
print("======================");
// Class files containing "Z" or "z":
print("只打印含有“z”或者“Z”的,以“class”结尾的文件----------------------");
for (File file : Directory.walk(".", ".*[Zz].*\\.class"))
print(file+ "");
}
} /*
* Output: (Sample) [.\xfiles] .\TestEOF.class .\TestEOF.java .\TransferTo.class
* .\TransferTo.java ---------------------- .\TestEOF.java .\TransferTo.java
* .\xfiles\ThawAlien.java ====================== .\FreezeAlien.class
* .\GZIPcompress.class .\ZipCompress.class
*/// :~
- 结果输出:
只打印以“T”开头的文件----------------------
只打印以“T”开头,以“java”结尾的文件----------------------
.\src\arrays\TestGenerated.java
.\src\arrays\ThreeDWithNew.java
.\src\exceptions\TurnOffChecking.java
.\src\generics\TupleList.java
.\src\generics\TupleTest.java
.\src\generics\TupleTest2.java
.\src\innerclasses\TestParcel.java
.\src\mypackage\shape\Triangle.java
.\src\mypackage\TextFile.java
.\src\mypackage\ThreeTuple.java
.\src\mypackage\Tuple.java
.\src\mypackage\TwoTuple.java
.\src\mypackage\TypeCounter.java
.\src\strings\TestRegularExpression.java
.\src\strings\TheReplacements.java
.\src\strings\ThreatAnalyzer.java
.\src\strings\Turtle.java
.\src\typeinfo\toys\ToyTest.java
======================
只打印含有“z”或者“Z”的,以“class”结尾的文件----------------------
.\bin\arrays\ParameterizedArrayType.class
.\bin\exceptions\Sneeze.class
.\bin\strings\ReplacingStringTokenizer.class
.\bin\strings\ThreatAnalyzer.class
.\bin\typeinfo\ClassInitialization.class
- 源代码:
第18章 Java IO系统 /18.1 File类/18.1.2 目录实用工具
标签: | 作者:易学笔记 更多资料请联系微信或QQ:1776565180 |
- 目录实用工具
- 产生文件集合,包括目录下的子目录和文件
- 源代码
- 源代码1:
package mypackage;
import java.util.*;
public class PPrint {
public static String pformat(Collection<?> c) {
if (c.size() == 0)
return "[]";
StringBuilder result = new StringBuilder("[");
for (Object elem : c) {
if (c.size() != 1)
result.append("\n ");
result.append(elem);
}
if (c.size() != 1)
result.append("\n");
result.append("]");
return result.toString();
}
public static void pprint(Collection<?> c) {
System.out.println(pformat(c));
}
public static void pprint(Object[] c) {
System.out.println(pformat(Arrays.asList(c)));
}
} // /:~
- 源代码2:
package mypackage;
//: net/mindview/util/Directory.java
//Produce a sequence of File objects that match a
//regular expression in either a local directory,
//or by walking a directory tree.
import java.util.regex.*;
import java.io.*;
import java.util.*;
public final class Directory {
public static File[] local(File dir, final String regex) {
return dir.listFiles(new FilenameFilter() {
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(new File(name).getName()).matches();
}
});
}
public static File[] local(String path, final String regex) { // Overloaded
return local(new File(path), regex);
}
// A two-tuple for returning a pair of objects:
public static class TreeInfo implements Iterable<File> {
public List<File> files = new ArrayList<File>();
public List<File> dirs = new ArrayList<File>();
// The default iterable element is the file list:
public Iterator<File> iterator() {
return files.iterator();
}
void addAll(TreeInfo other) {
files.addAll(other.files);
dirs.addAll(other.dirs);
}
public String toString() {
return "dirs: " + PPrint.pformat(dirs) + "\n\nfiles: "
+ PPrint.pformat(files);
}
}
public static TreeInfo walk(String start, String regex) { // Begin recursion
return recurseDirs(new File(start), regex);
}
public static TreeInfo walk(File start, String regex) { // Overloaded
return recurseDirs(start, regex);
}
public static TreeInfo walk(File start) { // Everything
return recurseDirs(start, ".*");
}
public static TreeInfo walk(String start) {
return recurseDirs(new File(start), ".*");
}
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 // Regular file
if (item.getName().matches(regex))
result.files.add(item);
}
return result;
}
// Simple validation test:
public static void main(String[] args) {
//args 参数为路径,如:D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage
if (args.length == 0)
System.out.println(walk("."));
else
for (String arg : args)
System.out.println(walk(arg));
}
} // /:~
- 源代码1:
- 结果输出:
dirs: [
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\music
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape
]
files: [
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\BasicGenerator.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\CollectionData.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\ContainerMethodDifferences.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\ConvertTo.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\CountingGenerator.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Directory.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\FiveTuple.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\FourTuple.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Generator.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\GeneratorsTest.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\MapData.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\music\Instrument.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\music\Music.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\music\Note.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\music\Wind.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\New.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Null.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Pair.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\PPrint.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Print.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\RandomGenerator.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Reverse.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Sets.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\Circle.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\RandomShape.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\Shape.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\Shapes.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\Square.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\shape\Triangle.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Stack.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\StackTest.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\TextFile.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\ThreeTuple.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\Tuple.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\TwoTuple.java
D:\myeclipse_projects_workspace\thinkinginjava\src\mypackage\TypeCounter.java
]