在使用File.mkdir和朋友时,我注意到他们不会在失败时抛出异常!幸运的是,FindBugs指出了这一点,现在我的代码至少检查了返回值,但是我仍然看不到任何有关调用失败
原因 的有意义的信息!
我如何找出为什么对这些File方法的调用失败的原因?是否有一个很好的替代方案或库来处理此问题?
我在SO和Google上进行了一些搜索,发现关于该主题的信息很少。
[更新]我已经尝试了VFS,但它的异常不再有用的信息。 例如,尝试移动最近删除的目录导致Could not rename file "D:\path\to\fileA" to "file:///D:/path/do/fileB".
没有提及fileA不再存在。
[更新]业务需求将我限制为仅JDK 1.6解决方案,因此JDK 1.7已发布
您可以调用本机方法,并以这种方式获取正确的错误代码。例如,c函数
mkdir具有错误代码,例如EEXIST和ENOSPC。您可以使用JNA轻松访问这些本机函数。如果支持*
nix和Windows,则需要创建此代码的两个版本。
对于Linux上的jna mkdir的示例,您可以执行此操作,
import java.io.IOException;
import com.sun.jna.LastErrorException;
import com.sun.jna.Native;
public class FileUtils {
private static final int EACCES = 13;
private static final int EEXIST = 17;
private static final int EMLINK = 31;
private static final int EROFS = 30;
private static final int ENOSPC = 28;
private static final int ENAMETOOLONG = 63;
static void mkdir(String path) throws IOException {
try {
NativeLinkFileUtils.mkdir(path);
} catch (LastErrorException e) {
int errno = e.getErrorCode();
if (errno == EACCES)
throw new IOException(
"Write permission is denied for the parent directory in which the new directory is to be added.");
if (errno == EEXIST)
throw new IOException("A file named " + path + " already exists.");
if (errno == EMLINK)
throw new IOException(
"The parent directory has too many links (entries). Well-designed file systems never report this error, because they permit more links than your disk could possibly hold. However, you must still take account of the possibility of this error, as it could result from network access to a file system on another machine.");
if (errno == ENOSPC)
throw new IOException(
"The file system doesn't have enough room to create the new directory.");
if (errno == EROFS)
throw new IOException(
"The parent directory of the directory being created is on a read-only file system and cannot be modified.");
if (errno == EACCES)
throw new IOException(
"The process does not have search permission for a directory component of the file name.");
if (errno == ENAMETOOLONG)
throw new IOException(
"This error is used when either the total length of a file name is greater than PATH_MAX, or when an individual file name component has a length greater than NAME_MAX. See section 31.6 Limits on File System Capacity.");
else
throw new IOException("unknown error:" + errno);
}
}
}
class NativeLinkFileUtils {
static {
try {
Native.register("c");
} catch (Exception e) {
e.printStackTrace();
}
}
static native int mkdir(String dir) throws LastErrorException;
}
如果我使用一个,其中键是定义类的对象,那么HashMap还会提供O(1)性能吗? 我认为它不应该给O(1)性能,因为用户定义对象的哈希键只返回键的地址,所以会有更多的冲突。
问题内容: 我需要在onclick事件的调用对象上有一个处理程序 即 我想在不使用jquery的$()。click或$()。live的情况下执行此操作,但要使用上述方法。 问题答案: 传递内联点击处理程序 或在函数中使用根据[W3C DOM 2级事件模型 但是,当然,IE是不同的,因此处理此问题的原始JavaScript方法是 或更详细 其中是被传递到在比IE其他浏览器的功能。 如果您使用的是jQ
问题内容: 我创建了一个过滤器来监视请求的长度。 我现在如何获得毫秒数? 问题答案: 1微秒= 1000纳秒 1毫秒= 1000微秒 请注意,结果会四舍五入,但是无论如何您通常都无法获得真正的纳秒精度(准确性取决于操作系统)。从Javadoc开始: 此方法提供纳秒精度,但不一定提供纳秒精度。
test1 a=new test 1(3,“b”);
问题内容: 是否有任何内置函数可以返回对象的长度? 例如,我有哪个应该返回。如果我使用它返回。 它可能是一个简单的循环函数,但我想知道是否有内置函数? 问题答案: 对于支持Object.keys()的浏览器,您可以执行以下操作: 否则(特别是在IE <9中),您可以使用循环自己遍历对象: 该是有确保你只从字面对象计数的属性,而不是从它的原型属性是“继承”。
问题内容: 我想问一下在调试过程中是否有可能以更有意义的方式识别对象。例如现在在Flex Builder调试面板中,例如: 对象(@ 12131241241) 理想情况下,我想拥有Object(@“ field1:field2”)…可以做到这一点。我相信在Java中,可以通过重写给定类的toString方法来实现…。在as3中尝试相同,但没有用 问题答案: 这里没有直接回答您的问题,但是周围有许多