关于java编程思想一个目录列表器例子的疑问 //{Args:"D.*\.java"} import java.util
关于java编程思想一个目录列表器例子的疑问//{Args:"D.*\.java"}importjava.util.regex.*;importjava.io.*;imp...
关于java编程思想一个目录列表器例子的疑问
//{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{
list=path.list(new DirFilter(args[0]));
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list){
System.out.println(dirItem);
}
}
}
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();
}
}
就这么一个程序,目的应该是输出D盘所有的java文件,只是不知道所谓的args参数是怎么输入给程序的?new DirFilter(args[0]) 中的args[0],file dir,String name这些参数都怎么获取呢?什么例子啊这是,书上还写得就是运行就输出所有.java文件, 展开
//{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{
list=path.list(new DirFilter(args[0]));
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list){
System.out.println(dirItem);
}
}
}
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();
}
}
就这么一个程序,目的应该是输出D盘所有的java文件,只是不知道所谓的args参数是怎么输入给程序的?new DirFilter(args[0]) 中的args[0],file dir,String name这些参数都怎么获取呢?什么例子啊这是,书上还写得就是运行就输出所有.java文件, 展开
2个回答
展开全部
args 参数怎么传递给程序么?
命令行为例
比如你的程序名DirList
那就命令行下输入 c:\java DirList 参数1,参数2...
如果是ide 运行的时候有设置运行参数
下面是一个文件查找的实例,吧通配符改改就能实现,找什么都行啦
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @author tiwson 2010-06-02
*
*/
public class FileSearcher {
/**
* 递归查找文件
*
* @param baseDirName
* 查找的文件夹路径
* @param targetFileName
* 需要查找的文件名
* @param fileList
* 查找到的文件集合
*/
public static void findFiles(String baseDirName, String targetFileName, List<File> fileList) {
/**
* 算法简述: 从某个给定的需查找的文件夹出发,搜索该文件夹的所有子文件夹及文件,
* 若为文件,则进行匹配,匹配成功则加入结果集,若为子文件夹,则进队列。 队列不空,重复上述操作,队列为空,程序结束,返回结果。
*/
String tempName = null;
// 判断目录是否存在
File baseDir = new File(baseDirName);
if (!baseDir.exists() || !baseDir.isDirectory()) {
System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
} else {
String[] filelist = baseDir.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(baseDirName + "\\" + filelist[i]);
// System.out.println(readfile.getName());
if (!readfile.isDirectory()) {
tempName = readfile.getName();
if (FileSearcher.wildcardMatch(targetFileName, tempName)) {
// 匹配成功,将文件名添加到结果集
fileList.add(readfile.getAbsoluteFile());
}
} else if (readfile.isDirectory()) {
findFiles(baseDirName + "\\" + filelist[i], targetFileName, fileList);
}
}
}
}
/**
* 通配符匹配
*
* @param pattern
* 通配符模式
* @param str
* 待匹配的字符串
* @return 匹配成功则返回true,否则返回false
*/
private static boolean wildcardMatch(String pattern, String str) {
int patternLength = pattern.length();
int strLength = str.length();
int strIndex = 0;
char ch;
for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {
ch = pattern.charAt(patternIndex);
if (ch == '*') {
// 通配符星号*表示可以匹配任意多个字符
while (strIndex < strLength) {
if (wildcardMatch(pattern.substring(patternIndex + 1), str.substring(strIndex))) {
return true;
}
strIndex++;
}
} else if (ch == '?') {
// 通配符问号?表示匹配任意一个字符
strIndex++;
if (strIndex > strLength) {
// 表示str中已经没有字符匹配?了。
return false;
}
} else {
if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {
return false;
}
strIndex++;
}
}
return (strIndex == strLength);
}
public static void main(String[] paramert) {
// 在此目录中找文件
String baseDIR = "C:\\Users\\Administrator\\Desktop\\tmp";
// 找扩展名为txt的文件
String fileName = "*2*.jpg";
List<File> resultList = new ArrayList<File>();
FileSearcher.findFiles(baseDIR, fileName, resultList);
if (resultList.size() == 0) {
System.out.println("No File Fount.");
} else {
for (int i = 0; i < resultList.size(); i++) {
System.out.println(resultList.get(i));// 显示查找结果。
}
}
}
}
命令行为例
比如你的程序名DirList
那就命令行下输入 c:\java DirList 参数1,参数2...
如果是ide 运行的时候有设置运行参数
下面是一个文件查找的实例,吧通配符改改就能实现,找什么都行啦
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @author tiwson 2010-06-02
*
*/
public class FileSearcher {
/**
* 递归查找文件
*
* @param baseDirName
* 查找的文件夹路径
* @param targetFileName
* 需要查找的文件名
* @param fileList
* 查找到的文件集合
*/
public static void findFiles(String baseDirName, String targetFileName, List<File> fileList) {
/**
* 算法简述: 从某个给定的需查找的文件夹出发,搜索该文件夹的所有子文件夹及文件,
* 若为文件,则进行匹配,匹配成功则加入结果集,若为子文件夹,则进队列。 队列不空,重复上述操作,队列为空,程序结束,返回结果。
*/
String tempName = null;
// 判断目录是否存在
File baseDir = new File(baseDirName);
if (!baseDir.exists() || !baseDir.isDirectory()) {
System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
} else {
String[] filelist = baseDir.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(baseDirName + "\\" + filelist[i]);
// System.out.println(readfile.getName());
if (!readfile.isDirectory()) {
tempName = readfile.getName();
if (FileSearcher.wildcardMatch(targetFileName, tempName)) {
// 匹配成功,将文件名添加到结果集
fileList.add(readfile.getAbsoluteFile());
}
} else if (readfile.isDirectory()) {
findFiles(baseDirName + "\\" + filelist[i], targetFileName, fileList);
}
}
}
}
/**
* 通配符匹配
*
* @param pattern
* 通配符模式
* @param str
* 待匹配的字符串
* @return 匹配成功则返回true,否则返回false
*/
private static boolean wildcardMatch(String pattern, String str) {
int patternLength = pattern.length();
int strLength = str.length();
int strIndex = 0;
char ch;
for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {
ch = pattern.charAt(patternIndex);
if (ch == '*') {
// 通配符星号*表示可以匹配任意多个字符
while (strIndex < strLength) {
if (wildcardMatch(pattern.substring(patternIndex + 1), str.substring(strIndex))) {
return true;
}
strIndex++;
}
} else if (ch == '?') {
// 通配符问号?表示匹配任意一个字符
strIndex++;
if (strIndex > strLength) {
// 表示str中已经没有字符匹配?了。
return false;
}
} else {
if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {
return false;
}
strIndex++;
}
}
return (strIndex == strLength);
}
public static void main(String[] paramert) {
// 在此目录中找文件
String baseDIR = "C:\\Users\\Administrator\\Desktop\\tmp";
// 找扩展名为txt的文件
String fileName = "*2*.jpg";
List<File> resultList = new ArrayList<File>();
FileSearcher.findFiles(baseDIR, fileName, resultList);
if (resultList.size() == 0) {
System.out.println("No File Fount.");
} else {
for (int i = 0; i < resultList.size(); i++) {
System.out.println(resultList.get(i));// 显示查找结果。
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询