我试图写一个方法来获取目录中的所有目录和文件,最后决定放弃并在这里询问。
我知道这个问题已经被问过几次了,也得到了回答,但是这个问题有点难。
我确实得到了这个代码
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)
有人能给我一些建议吗?
谢谢卢克。
1)像这样初始化这个listOfFilesInFolder
listOfFilesInFolder = new String[noOfFilesInFolder]
2)不确定这是否是唯一的问题,但更改
zzz <= noOfFilesInFolder
zzz < noOfFilesInFolder
3)此外,您永远不会更改k
变量,不确定这是否有意。
既然你使用的是Java 7,就不用麻烦了,使用FileVisitor
。
创建一个类,甚至是匿名的,来管理目录中的所有文件,Files.walkFileTree()
方法将为您遍历文件,并在不同事件上执行您在访问者中放置的代码。
你也可以扩展SimpleFileVisitor
。您可以在这里看到两个访问者示例(一个用于递归复制,另一个用于递归删除)。
由于您似乎想要上传,您可能还想使用Files.copy()
,它可以采用源路径并将其内容发送到OutputStream
。