我试图编写一个方法来获取目录中的所有目录和文件,最后决定放弃并在这里询问。
我知道这已被问过几次并且已经得到了答复,但这有点困难。
我确实得到了这段代码
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)
请有人就此提出任何建议。
谢谢卢克。
答案 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
。