如何循环遍历一个目录,获取所有文件名,然后在Java中获取这些文件的内容
我是新来的。如果我有任何错误的格式,请原谅 因此,在C驱动器中,我有一个名为如何循环遍历一个目录,获取所有文件名,然后在Java中获取这些文件的内容,java,file,exception,Java,File,Exception,我是新来的。如果我有任何错误的格式,请原谅 因此,在C驱动器中,我有一个名为搜索文件的文件夹,在搜索文件中,我有四个子目录名为文件夹1,文件夹2,文件夹3和文件夹4 在文件夹1中,我有一个名为hello.txt的文本文件,该文件的内容是hello 我的预期输出是“文件目录”+“文件名”+“文件正文” 下面是我现在拥有的代码 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundExceptio
搜索文件
的文件夹,在搜索文件
中,我有四个子目录名为文件夹1
,文件夹2
,文件夹3
和文件夹4
在文件夹1
中,我有一个名为hello.txt
的文本文件,该文件的内容是hello
我的预期输出是“文件目录”+“文件名”+“文件正文”
下面是我现在拥有的代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
public class FileDirectories {
public static void main(String[] args) throws IOException {
File[] files = new File("C:\\Search Files").listFiles();
showFiles(files);
}
public static void showFiles(File[] files) throws IOException {
String line = null;
try{
for (File file : files) {
if (file.isDirectory()) {
String fileName = "Directory" + file.getName();
//System.out.println("Directory: " + file.getName());
BufferedReader in = new BufferedReader(new FileReader(file));
while((line = in.readLine()) != null)
{
System.out.println(line);
}
in.close();
showFiles(file.listFiles()); // Calls same method again.
} else {
System.out.println("File: " + file.getName() + file.toString());
}
}
}catch(NullPointerException e){
e.printStackTrace();
}
/*Iterator<File> it = FileUtils.iterateFiles(new File("C://Search Files//"), null, false);
while(it.hasNext()) {
System.out.println(((File) it.next()).getName());
}*/
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Iterator;
导入org.apache.commons.io.FileUtils;
公共类文件目录{
公共静态void main(字符串[]args)引发IOException{
File[]files=新文件(“C:\\Search files”).listFiles();
显示文件(文件);
}
公共静态void showFiles(文件[]文件)引发IOException{
字符串行=null;
试一试{
用于(文件:文件){
if(file.isDirectory()){
String fileName=“Directory”+file.getName();
//System.out.println(“目录:“+file.getName());
BufferedReader in=新的BufferedReader(新文件读取器(文件));
而((line=in.readLine())!=null)
{
系统输出打印项次(行);
}
in.close();
showFiles(file.listFiles());//再次调用相同的方法。
}否则{
System.out.println(“文件:”+File.getName()+File.toString());
}
}
}捕获(NullPointerException e){
e、 printStackTrace();
}
/*Iterator it=FileUtils.iterateFiles(新文件(“C://Search Files/”),null,false);
while(it.hasNext()){
System.out.println(((文件)it.next()).getName());
}*/
}
}
当我执行上述代码时,我得到以下错误:
Exception in thread "main" java.io.FileNotFoundException: C:\Search Files\Folder 1 (Access is denied)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileReader.<init>(FileReader.java:72)
at org.raghav.stuff.FileDirectories.showFiles(FileDirectories.java:27)
at org.raghav.stuff.FileDirectories.main(FileDirectories.java:16)
线程“main”java.io.FileNotFoundException中的异常:C:\Search Files\Folder 1(访问被拒绝)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:146)
位于java.io.FileReader。(FileReader.java:72)
位于org.raghav.stuff.FileDirectories.showFiles(FileDirectories.java:27)
位于org.raghav.stuff.FileDirectories.main(FileDirectories.java:16)
再一次,我需要获取文件目录、文件名和文件内容
对于hello.txt
,预期输出应为:
C:\Search Files\Folder1\hello.txt hello
你们能给我指一下正确的方向吗?如何修复上述异常以及如何获取显示目录、文件名和文件内容的字符串
感谢高级版。您的代码看起来不错,只是您必须按照以下方式组织代码,尤其是showFiles方法
public static void showFiles(File[] files) throws IOException {
String line = null;
try{
for (File file : files) {
if (file.isDirectory()) {
String fileName = "Directory: " + file.getName();
System.out.print(fileName);
showFiles(file.listFiles()); // Calls same method again.
} else {
System.out.print("\tFile: " + file.getName() + file.toString());
//System.out.println("Directory: " + file.getName());
BufferedReader in = new BufferedReader(new FileReader(file));
while((line = in.readLine()) != null)
{
System.out.print("\t Content:" + line);
}
in.close();
System.out.println();
}
}
}catch(NullPointerException e){
e.printStackTrace();
}
输出结果如下所示:
Directory: Folder 1 File: C:\Search Files\Folder 1\test.txt Content:this is a test
Directory: Folder 2 File: C:\Search Files\Folder 2\test.txt Content:this is a test
Directory: Folder 3 File: C:\Search Files\Folder 3\test.txt Content:this is a test
Directory: Folder 4 File: C:\Search Files\Folder 4\test.txt Content:this is a test
您的读取代码位于
if(file.isDirectory())中{
block-您正在尝试阅读DirectoriesShow,您会修复它吗?当然,不要这样做:)您有一个文件的else
子句,这是您应该使用读卡器的地方。您可以添加一些解释吗?您更改了什么以及为什么?当然可以。我将代码移动到if的else部分来读取文件(file.isDirectory()),因为如果它是一个目录,则需要再次递归调用showFiles()方法,否则打印内容。