Outil de lecture de log : ne suit plus les fichiers déplacés
Le lecteur maintenait le descriteur de fichier ouvert. Ce qui fait pour Windows, d'empêcher la copie du fichier. Et sur Linux, empêche le suivi du fichier recréé du même nom que celui déplacé précédemment. Le fichier de test a été changé en conséquence pour simuler ces déplacements de fichier.
This commit is contained in:
parent
30bda04ae3
commit
8dba570693
@ -60,15 +60,25 @@ public class Main {
|
|||||||
|
|
||||||
long previousLength = 0;
|
long previousLength = 0;
|
||||||
while(true) {
|
while(true) {
|
||||||
if (reader.length() < previousLength) {
|
|
||||||
reader.seek(0);
|
|
||||||
}
|
|
||||||
if ((line = readUTF8LineFromFile(reader)) != null) {
|
if ((line = readUTF8LineFromFile(reader)) != null) {
|
||||||
outln(line);
|
outln(line);
|
||||||
previousLength = reader.length();
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Thread.sleep(10);
|
previousLength = reader.length();
|
||||||
|
reader.close();
|
||||||
|
Thread.sleep(250);
|
||||||
|
|
||||||
|
// tant que l'exeption est lancée, on réessaye
|
||||||
|
for(;;) {
|
||||||
|
try {
|
||||||
|
reader = new RandomAccessFile(f, "r");
|
||||||
|
break;
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
Thread.sleep(250);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (reader.length() >= previousLength)
|
||||||
|
reader.seek(previousLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,9 @@ package fr.pandacube.java.logviewer.test;
|
|||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
|
import java.nio.file.FileSystemException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@ -42,11 +45,21 @@ public class Test {
|
|||||||
|
|
||||||
wr.write(randomLine());
|
wr.write(randomLine());
|
||||||
wr.flush();
|
wr.flush();
|
||||||
Thread.sleep(r.nextInt(10));
|
Thread.sleep(r.nextInt(50));
|
||||||
|
|
||||||
if (r.nextInt(10) == 0) {
|
if (r.nextInt(100) == 0) {
|
||||||
wr.close();
|
wr.close();
|
||||||
f.delete();
|
|
||||||
|
// tant que l'exeption est lancée, on réessaye
|
||||||
|
for(;;) {
|
||||||
|
try {
|
||||||
|
Files.move(f.toPath(), new File(r.nextInt(10)+".old").toPath(), StandardCopyOption.ATOMIC_MOVE);
|
||||||
|
break;
|
||||||
|
} catch (FileSystemException e) {
|
||||||
|
Thread.sleep(250);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
f.createNewFile();
|
f.createNewFile();
|
||||||
wr = new BufferedWriter(new FileWriter(f));
|
wr = new BufferedWriter(new FileWriter(f));
|
||||||
}
|
}
|
||||||
@ -82,7 +95,7 @@ public class Test {
|
|||||||
|
|
||||||
|
|
||||||
private static Random r = new Random();
|
private static Random r = new Random();
|
||||||
private static char[] chars = new char[] {' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', '♪', '♫', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
|
private static char[] chars = new char[] {' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
|
||||||
|
|
||||||
public static String randomLine() {
|
public static String randomLine() {
|
||||||
int length = r.nextInt(100)+15;
|
int length = r.nextInt(100)+15;
|
||||||
|
Loading…
Reference in New Issue
Block a user