Ema*_*oni 5 java linux file-io
我尝试了很多例子,但没有人工作.我尝试这个但是不行.
我也试过用tryLock()
.它总是返回false.为什么?
private boolean checkCompleteFile(File f)
{
RandomAccessFile file = null;
FileLock fileLock = null;
try
{
file = new RandomAccessFile(f, "rw");
FileChannel fileChannel = file.getChannel();
fileLock = fileChannel.lock();
if (fileLock != null)
{
fileLock.release();
file.close();
return false;
}
}
catch(Exception e)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
你捕获一个异常并返回 false,这就是为什么你总是得到 false,对异常做一些事情或者不捕获它,这样你就知道是否抛出了异常,如果你捕获了一般异常,则 false 返回值并没有真正的意义。
try {
lock = channel.tryLock();
// ...
} catch (OverlappingFileLockException e) {
// File is already locked in this thread or virtual machine
}
lock.release();
channel.close();
Run Code Online (Sandbox Code Playgroud)
您只需尝试访问该文件并在失败时捕获异常:
boolean isLocked=false;
RandomAccessFile fos=null;
try {
File file = new File(filename);
if(file.exists())
fos=new RandomAccessFile(file,"rw");
}catch (FileNotFoundException e) {
isLocked = true;
}catch (SecurityException e) {
isLocked = true;
}catch (Exception e) {
// handle exception
}finally {
try {
if(fos!=null) {
fos.close();
}
}catch(Exception e) {
//handle exception
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,RandomAccessFile类会抛出:
文件未找到异常-
如果模式为“r”,但给定的字符串不表示现有的常规文件,或者模式以“rw”开头,但给定的字符串不表示现有的、可写的常规文件,并且该名称的新常规文件不能被创建,或者打开或创建文件时发生其他错误。
安全异常-
如果安全管理器存在并且其 checkRead 方法拒绝对文件的读访问或者模式为“rw”并且安全管理器的 checkWrite 方法拒绝对文件的写访问