我正在运行Windows,我试图引用一个目录。 我的function是这样开始的:
File file = new File("C:\\somedir\\report"); if (!file.exists()) { file.mkdirs(); } doStuffWith(file);
当我尝试调用doStuffWith
时,我在doStuffWith
函数中得到了一个NullPointerException doStuffWith
。 那么我看着C:\ somedir,我发现了什么 – 有一个名为“报告”,没有扩展名,还有一个名为“报告”的目录! 似乎发生的是file
对象是指报告文件而不是目录 。 我如何确保我指的是目录而不是文件?
一种方法是将与“C:\ somedir”对应的文件对象传递给方法和方法内部,做一个listFiles()并遍历内容,每次检查文件名,如果是“report “,做一个isDirectory()。 如果返回true,则继续进行实际处理。
我认为有一个isDirectory()方法会告诉你,如果它是一个目录
– 编辑
这就是我得到如此早的。 我在本地运行你的代码,对我来说工作正常。 能够创建新文件,读取目录内容等。你还想做什么?
我不明白这个问题对我来说很好:
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 ); } }
检查您的文件系统是否启用了区分大小写( HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
注册表中的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"
是完全正确的。