我正在运行Windows而我正在尝试引用目录。我的功能就像这样开始:
File file = new File("C:\\somedir\\report");
if (!file.exists()) {
file.mkdirs();
}
doStuffWith(file);
当我试图调用doStuffWith
时,我在listFiles
函数中遇到了NullPointerException。好吧,我查看了C:\ somedir,我发现了什么 - 有一个名为“report”的文件,没有扩展名,还有一个名为“report”的目录!似乎发生的事情是file
对象指的是报告文件而不是目录。如何确保我指的是目录而不是文件?
答案 0 :(得分:3)
我认为有一个isDirectory()方法会告诉你它是否是一个目录
- 编辑
这就是我这么早起床的原因。我在本地运行你的代码,它对我来说很好。能够创建新文件,读取目录内容等等。您还想做什么?
答案 1 :(得分:3)
一种方法是将对应于“C:\ somedir”的文件对象传递给方法并在方法内部,执行listFiles()并遍历内容,每次检查文件名,如果是是“报告”,做一个isDirectory()。当返回true时,继续进行实际处理。
答案 2 :(得分:1)
我不明白这个问题对我来说很合适:
public class MkDir {
static void doStuff(File dir) {
if ( dir.isDirectory() ) {
File[] listFiles = dir.listFiles();
for ( File f : listFiles ) {
System.out.println( f.getName() );
}
}
}
public static void main(String[] args) {
File file = new File( "C:\\dev\\rep2\\rep" );
if ( !file.exists() ) {
file.mkdirs();
}
doStuff( file );
}
}
答案 3 :(得分:0)
检查您的文件系统是否已启用区分大小写(注册表中为HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
。)
如果是这样,您可能会因案件相关问题而受到伤害。一种检查方法:
String someName = "./nameNotUsedYet";
boolean first = new File(someName).mkdirs();
boolean second = new File(someName.toUpperCase()).mkdirs();
System.out.println("first = " + first + ", second = " + second);
如果两个mkdirs()
调用都成功,则表示您有与案例相关的并发症。如果是这样,请确保"C:\somedir\report"
的情况完全正确。