我如何获得java中目录中所有文件和文件夹的列表

时间:2014-03-21 23:08:31

标签: java file

我试图编写一个方法来获取目录中的所有目录和文件,最后决定放弃并在这里询问。

我知道这已被问过几次并且已经得到了答复,但这有点困难。

我确实得到了这段代码

    public static void listf(String directoryName, ArrayList<File> files)
    {
        File directory = new File(directoryName);

        // get all the files from a directory
        File[] fList = directory.listFiles();
        for (File file : fList)
        {
            if (file.isFile())
            {
                files.add(file);
            } else if (file.isDirectory())
            {
                listf(file.getAbsolutePath(), files);
            }


        }
        System.out.println(files);
    }

它帮助了很多,但我需要它也给它在ei的目录。

C:\\Users\\UserName\\Desktop\\Folder\\Folder1\\a.txt
C:\\Users\\UserName\\Desktop\\Folder\\Folder1\\b.txt

C:\\Users\\UserName\\Desktop\\Folder\\Folder2\\c.txt

我的第一个代码:

public class FileTransfer
{
    private final static File testFileFolder = new File("C:\\Users\\Melaia\\Desktop\\Send\\");
    private static File[] filesInFolder;

    private static String[] listOfFilesInFolder;

    private static int noOfFilesInFolder, k = 0;

    public static void startupFileSend()
    {


        filesInFolder = testFileFolder.listFiles();
        noOfFilesInFolder = (filesInFolder.length);



        for(int zzz = 0; zzz <= noOfFilesInFolder; zzz++)
        {



            if(filesInFolder[k].isDirectory())
            {
                File[] file1 = filesInFolder[k].listFiles();

                listOfFilesInFolder[k] = file1[k].getName() + ";";
            }
            else
            {
                listOfFilesInFolder[k] = filesInFolder[k].getName();
            }

            System.out.println(listOfFilesInFolder[k]);

        }


    }
}

但这给了我这个例外:

Exception in thread "main" java.lang.NullPointerException
    at Com.org.FileTransfer.startupFileSend(FileTransfer.java:32)
    at Com.org.Main.main(Main.java:7)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

请有人就此提出任何建议。

谢谢卢克。

2 个答案:

答案 0 :(得分:2)

1)像这样初始化这个listOfFilesInFolder

listOfFilesInFolder = new String[noOfFilesInFolder]

2)不确定这是否是唯一的问题,但改变

zzz <= noOfFilesInFolder

zzz < noOfFilesInFolder

3)此外,您永远不会更改k变量,也不确定是否有意。

答案 1 :(得分:1)

由于您使用的是Java 7,请不要打扰并使用FileVisitor

创建一个类,甚至是匿名的,来管理目录中的所有文件,Files.walkFileTree()方法将为您遍历文件并执行您在访问者中为不同事件添加的代码。

您也可以扩展SimpleFileVisitor。您可以看到两个访问者示例(一个用于递归复制,另一个用于递归删除)here

由于您似乎想要上传,因此您可能还希望使用Files.copy(),它可以采用源路径并将其内容发送到OutputStream