Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何循环遍历一个目录,获取所有文件名,然后在Java中获取这些文件的内容_Java_File_Exception - Fatal编程技术网

如何循环遍历一个目录,获取所有文件名,然后在Java中获取这些文件的内容

如何循环遍历一个目录,获取所有文件名,然后在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

我是新来的。如果我有任何错误的格式,请原谅

因此,在C驱动器中,我有一个名为
搜索文件
的文件夹,在
搜索文件
中,我有四个子目录名为
文件夹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()方法,否则打印内容。