Java 如何使用静态方法搜索文件目录并返回对象?
我正在努力学习如何编写实用程序类,但我不确定我所做的是否适合实用程序类。我对java还是一个新手,试图从概念上理解如何以及何时做某些事情 我有一个只有静态方法的类。我认为每当递归调用我的Java 如何使用静态方法搜索文件目录并返回对象?,java,recursion,Java,Recursion,我正在努力学习如何编写实用程序类,但我不确定我所做的是否适合实用程序类。我对java还是一个新手,试图从概念上理解如何以及何时做某些事情 我有一个只有静态方法的类。我认为每当递归调用我的search()方法时,它原来拥有的数据就会丢失。我的课程设置如下: public class MyClassUtil { public static List<MyObjectData> findStuff(File path, List<String> listOfMyStu
search()
方法时,它原来拥有的数据就会丢失。我的课程设置如下:
public class MyClassUtil {
public static List<MyObjectData> findStuff(File path, List<String> listOfMyStuff) {
String listAsString = convertListToString(listOfMyStuff);
Pattern pattern = Pattern.compile(listAsString);
List<MyObjectData> myObjectData = search(path, pattern);
return myObjectData;
}
private static final String convertListToString(List<String> list) {
// This method converts a given list to a string. It works fine!
}
private static final List<MyObjectData> search(File directory, Pattern p) {
List<MyObjectData> dataInFile = new ArrayList<MyStringData>();
for (File file : directory.listFiles()) {
if (file.isFile()) {
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
try {
Matcher m = p.matcher(line);
boolean found = m.find();
if (found) {
dataInFile.add(new MyObjectData(m.group(2), true));
}
} catch (Exception E) {
e.printStackTrace();
}
}
br.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
if (file.isDirectory()) {
search(file, p);
}
return dataInFile;
}
}
}
公共类MyClassUtil{
公共静态列表findStuff(文件路径,列表listOfMyStuff){
字符串listAsString=convertListToString(listOfMyStuff);
Pattern=Pattern.compile(listAsString);
列表myObjectData=搜索(路径、模式);
返回myObjectData;
}
私有静态最终字符串convertListToString(列表){
//此方法将给定列表转换为字符串。它工作正常!
}
私有静态最终列表搜索(文件目录,模式p){
List datainfle=new ArrayList();
对于(文件:directory.listFiles()){
if(file.isFile()){
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
弦线;
而((line=br.readLine())!=null){
试一试{
匹配器m=p.匹配器(线);
布尔查找=m.find();
如果(找到){
添加(新的MyObjectData(m.group(2),true));
}
}捕获(例外E){
e、 printStackTrace();
}
}
br.close();
}捕获(ioe异常ioe){
ioe.printStackTrace();
}
}
if(file.isDirectory()){
搜索(文件,p);
}
返回数据填充;
}
}
}
我没有得到任何回报(尽管我知道有些东西应该被归还) 问题在于您没有添加递归调用的结果 更改:
if(file.isDirectory()) { search(file, p); }
到
您可以让递归代码将文件添加到传入的列表中。示例只列出了每个文件
private static void recursiveFill(List<File> files, File path) {
if (path.isFile()) {
files.add(path);
return;
}
if (path.isDirectory()) {
File[] innerFiles = path.listFiles();
for (File file : innerFiles) {
recursiveFill(files, file);
}
}
}
public static List<File> listFileIn(File path) {
List<File> result = new ArrayList<File>();
recursiveFill(result, path);
return result;
}
public static void main(String[] args) {
List<File> files = listFileIn(new File("."));
for (File file : files) {
System.out.println(file);
}
}
并将这些结果合并到您返回的列表中。您的问题是什么?@PhilippSander由于递归调用搜索方法(我想),我没有得到任何结果。我在这种情况下使用实用程序类有意义吗?哇,我被困在这个问题上一天多了,我不敢在这里问这个问题。非常感谢,这是我的问题。当然,为什么不呢。我可能会将其划分为专门的实用程序类,例如用于文件操作的
MyFileUtil
,以及用于字符串操作的MyStringUtil
。
private static void recursiveFill(List<File> files, File path) {
if (path.isFile()) {
files.add(path);
return;
}
if (path.isDirectory()) {
File[] innerFiles = path.listFiles();
for (File file : innerFiles) {
recursiveFill(files, file);
}
}
}
public static List<File> listFileIn(File path) {
List<File> result = new ArrayList<File>();
recursiveFill(result, path);
return result;
}
public static void main(String[] args) {
List<File> files = listFileIn(new File("."));
for (File file : files) {
System.out.println(file);
}
}
if(file.isDirectory()) { search(file, p); }