我有一个写入日志文件的方法.如果文件存在,它应该附加到它,如果没有,那么我希望它创建一个新文件.
if (!file.exists() && !file.createNewFile()) {
System.err.println("Error with output file: " + outFile
+ "\nCannot create new file.");
continue;
}
Run Code Online (Sandbox Code Playgroud)
我有这个来检查是否可以创建一个文件.file是一个java.io.File对象.createNewFile抛出IOException:没有这样的文件或目录.自从我几周前写这篇文章以来,这种方法一直运作良好,并且最近刚开始这样做,虽然我不知道我能改变什么.我已经检查过,目录存在并且我有权限,但是我认为如果它因任何原因无法生成文件,它应该返回false.
有什么我不想让这个工作吗?
通常这是你最近改变的东西,首先关闭你的示例代码,如果不存在文件而不创建新文件 - 你试图编写代码 - 它是什么?
然后,查看目录列表以查看它是否确实存在,并在文件对象上执行println/toString(),并在异常上执行getMessage(),以及打印堆栈跟踪.
然后,再次从零知识开始,并从您使用的每个步骤重新考虑到这里.这可能是你在某个地方陷入困境而在代码中进行概念化(因为它正在工作) - 你只是详细地追溯每一步,你会发现它.
小智 6
我认为你得到的异常很可能是原子方法的文件检查的结果file.createNewFile()。该方法无法检查文件是否存在,因为某些父目录不存在或您无权访问它们。我建议这样做:
if (file.getParentFile() != null && !file.getParentFile().mkDirs()) {
// handle permission problems here
}
// either no parent directories there or we have created missing directories
if (file.createNewFile() || file.isFile()) {
// ready to write your content
} else {
// handle directory here
}
Run Code Online (Sandbox Code Playgroud)
如果考虑并发性,所有这些检查都是无用的,因为在每种情况下,其他线程都可以创建、删除或对您的文件执行任何其他操作。在这种情况下,您必须使用我不建议这样做的文件锁;)
| 归档时间: |
|
| 查看次数: |
70357 次 |
| 最近记录: |