Java Arraylist和文件
我需要做的是从用户处获取一个搜索文件的路径,并从用户处获取一组字符,这是要搜索的文件名的一部分。一旦找到该文件,它将显示所有位置,包括子文件夹以及完整的文件名。我所做的是获取给定路径中的所有文件,并使用ListFiles()将它们放入file[]数组。获取所有文件的名称并将它们保存到arraylist中。创建另一个arraylist并仅保存文件名,而不保存前一个arraylist的扩展名。然后使用用户输入的字符集与此arraylist中的每个文件名进行比较。为了测试这是否有效,我打印了它,但它打印了所有文件名,而不仅仅是与用户输入的字符集匹配的文件名。以下是我的代码:Java Arraylist和文件,java,string,arraylist,Java,String,Arraylist,我需要做的是从用户处获取一个搜索文件的路径,并从用户处获取一组字符,这是要搜索的文件名的一部分。一旦找到该文件,它将显示所有位置,包括子文件夹以及完整的文件名。我所做的是获取给定路径中的所有文件,并使用ListFiles()将它们放入file[]数组。获取所有文件的名称并将它们保存到arraylist中。创建另一个arraylist并仅保存文件名,而不保存前一个arraylist的扩展名。然后使用用户输入的字符集与此arraylist中的每个文件名进行比较。为了测试这是否有效,我打印了它,但它打
import java.util.*;
import java.io.*;
public class FileSearch
{
public static void main(String args[])
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(" 1.Enter the path to search:");
String str = br.readLine();
System.out.println(" 2.Enter some characters of the filename:");
String str1 = br.readLine();
File files = new File(str);
File[] f = files.listFiles();
List<String> li = new ArrayList<String>();
List<String> li1 = new ArrayList<String>();
for(int i=0;i<f.length;i++)
{
if(f[i].isFile())
{
li.add(f[i].getName());
}
}
for(int i=0;i<li.size();i++)
{
int j = li.get(i).lastIndexOf('.');
li1.add((j>-1)?li.get(i).substring(0, j):li.get(i));
}
for(int i=0;i<li1.size();i++)
{
if(li1.get(i).contains(str1));
{
System.out.println(li1.get(i));
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
import java.util.*;
导入java.io.*;
公共类文件搜索
{
公共静态void main(字符串参数[])
{
尝试
{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“1.输入搜索路径:”);
字符串str=br.readLine();
System.out.println(“2.输入文件名的一些字符:”);
字符串str1=br.readLine();
文件文件=新文件(str);
File[]f=files.listFiles();
List li=new ArrayList();
List li1=新的ArrayList();
对于(int i=0;i,您的代码非常好。以下语句是问题的根本原因
if(li1.get(i).contains(str1));
{
System.out.println(li1.get(i));
}
如果您已清楚地观察到,则在If条件之后使用了;
。删除分号,代码将正常工作。您的代码绝对正常。以下语句是问题的根本原因
if(li1.get(i).contains(str1));
{
System.out.println(li1.get(i));
}
如果您已经清楚地观察到,您在If条件之后使用了;
。删除分号,代码就可以正常工作。这里看一下。它将帮助您了解如何调试程序。
看起来您可以这样构造完整路径:
String fullPath = files.getAbsolutePath() + li1.get(i);
看看这个,它将帮助你理解如何调试你的程序。
看起来您可以这样构造完整路径:
String fullPath = files.getAbsolutePath() + li1.get(i);
没错。你正在打印你的li1 arraylist的内容,它包含没有扩展名的名称。你想让它做什么?你的代码对我来说似乎是对的。你确定str1的值吗?试着用一个调试器来调试它。如果你需要帮助,就调试它吧:非常感谢你…我从来没有真正使用过调试器…图(他说:)顺便说一句,你的代码有点凌乱-你可以在一个for-each循环中完成这个逻辑,而不需要创建任何列表。而且str
和str1
都不是很好的变量名,searchDirectory
和filePattern
将更能说明这些变量代表什么正在清除li1 arraylist的内容,它包含没有扩展名的名称。你想让它做什么?你的代码对我来说似乎是正确的..你确定str1的值吗?试着用一个调试程序来调试它…如果你需要帮助,请调试它:非常感谢…我从来没有真正使用过调试程序…解决了:)作为aside,您的代码有点混乱-您可以在单个for-each循环中执行此逻辑,无需创建任何列表。此外,str
和str1
都不是很好的变量名,searchDirectory
和filePattern
将更能指示这些变量所代表的内容。不要难过。这个错误如果你使用Eclipse,你可以将这样的语句作为编译器警告。请参阅别难过。这个错误曾经让每个人都收到过警告。如果你使用Eclipse,你可以将这样的语句作为编译器警告。请参阅@JoelThanks很多:)但现在这些文件名存储在arraylist中。我需要打印出它们的完整文件路径。既然它们现在是字符串,我该怎么做。您是否将扩展名存储在任何位置?如果是,您可以执行字符串连接,将它们组合成一个字符串,以便打印出fullPath=files.getAbsolutePath()+li1.get(I);@JoelThanks很多:)但是现在这些文件名存储在一个arraylist中。我需要打印出它们的完整文件路径。既然它们现在是字符串,我该怎么做呢。扩展名是否存储在任何地方?如果是的话,你可以通过字符串连接将它们组合成一个字符串,然后打印出fullPath=files。getAbsolutePath()+li1.get(i) );