ファイルが2つのプロセスで使用されている状況があります。だから、ファイルが既にロックされていて、ロックが解除されるのを待っているかどうか確認します。自己ロックファイルに書き込めません
もう一度別のプロセスでロックが解除されると、私は自分のロックを入れて読み書きを開始します。しかし、以下のようにエラーが発生しています。私はそれが私によってロックされているので、私はそのエラーを知っているが、私は最初にファイルにロックを入れて、他のプロセスが時間が使用されるまでそれを使用できないように読み書きを開始したい。ここで
Exception in thread "main" java.io.IOException: The process cannot access the file because another process has locked a portion of the file
は私のコードスニペットは
package RestClient;
import java.io.*;
import java.nio.Buffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
public class Filelocking {
public static void main(String[] args) throws IOException {
String Name = "E:\\RestAPI\\Token.txt";
File File = new File(Name);
File FileRename = new File(Name);
boolean FileEdit = false;
if (!File.renameTo(FileRename)) {
while (!File.renameTo(FileRename)) {
System.out.println("rename failed");
if (File.renameTo(FileRename)) {
FileEdit = true;
break;
}
}
}
else {
FileEdit = true;
}
System.out.println("rename success");
if (FileEdit) {
RandomAccessFile AccessFile = new RandomAccessFile(File, "rw");
FileChannel channel = AccessFile.getChannel();
FileLock lock = null;
try {
lock = channel.lock();
System.out.println("Lock Status: " + lock.isValid());
BufferedReader read = new BufferedReader (new FileReader(File));
System.out.println(read.readLine());
}
catch (OverlappingFileLockException e) {
System.out.println("File Lock Error: " + e.getMessage());
}
lock.close();
}
}
}
で誰がどのように私はこの問題を解決することができ、何が間違ってここにやっている私にしてください教えてください。
としてあなたはBufferedReaderもファイルも閉じないでください。あなたの問題の原因となるかもしれません。 –
@XavierBouclet、あなたは本当にバッファを閉じることがここで心配だと思いますか?それはファイルを読んだ後に来る。しかし、今試してみた – Shannin
いいえ、私は間違っていた私の答えを参照してください。あなたはあなたのファイルをBufferedReaderで読むのではなく、あなたのロックを通して読むべきです。 –