我没有iMac,但是2个用户在启动我的应用程序时在iMac上遇到了同样的问题。应用程序首先在用户主文件夹中通过以下代码创建文件夹+文件(如果找不到它们):
final String FILE_SEPARATOR = System.getProperty( "file.separator" );
File homeFolder = new File( System.getProperty( "user.home" ) + FILE_SEPARATOR + ".testAPP" + FILE_SEPARATOR + "database" );
String dataFilePath = homeFolder.getCanonicalFile() + FILE_SEPARATOR + "data.xml";
if( !homeFolder.exists() ) homeFolder.mkdirs();
File dataFile = new File( dataFilePath );
dataFile.createNewFile(); // Throws IOException
此代码在最后一行抛出这两个异常:
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)
iMac是否存在导致此问题的特定限制?
答案 0 :(得分:0)
通过String concat和FILE_SEPARATOR创建pathes是一种不可靠的方法。 mkdirs()执行也可能失败,因此检查返回值很重要。 试试吧:
File homeFolder = new File(System.getProperty("user.home"));
File testAppDir = new File(homeFolder, ".testAPP");
File databaseDir = new File(testAppDir, "database");
File dataFile = new File(databaseDir, "data.xml");
if (!databaseDir.isDirectory())
if (!databaseDir.mkdirs())
throw new IOException("Failed to create directory");
dataFile.createNewFile();