Я хочу написать круговой файл журнала:Как получить последнее место в файле в JAVA?
public class CircularLogFile {
public static final String LOG_FILE_NAME = "circular.log";
public static final int LOG_FILE_SIZE_MAX = 256;
public static void write(String line) throws IOException {
//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(logFileName, true));
RandomAccessFile raf = new RandomAccessFile(LOG_FILE_NAME, "rw");
System.out.println("file size: "+raf.length());
System.out.println("file pointer: "+raf.getFilePointer());
if (raf.length() >= LOG_FILE_SIZE_MAX && raf.getFilePointer() >= LOG_FILE_SIZE_MAX) {
raf.seek(0);
} else if (raf.length() >= LOG_FILE_SIZE_MAX && raf.getFilePointer() < LOG_FILE_SIZE_MAX) {
} else if (raf.length() < LOG_FILE_SIZE_MAX) {
raf.seek(raf.length());
}
raf.writeChars(line+"\n");
raf.close();
}
public static void main(String[] args) throws IOException {
int lineNumber = 0;
while (true) {
lineNumber++;
write("This is Line "+lineNumber);
}
}
}
выход:
This is Line 1400
s is Line 2
This is Line 3
This is Line 4
This is Line 5
This is Line 6
This is Line 7
This is Line 8
This is Line 9
не
This is Line 10
This is Line 11
This is Line 12
This is Line 4
This is Line 5
This is Line 6
This is Line 7
This is Line 8
This is Line 9
Я хочу выше результата, но я нашел, что я не могу получить позицию последней писал в файле, как его получить?
это не очень понятно. Увидев ваш код, выход должен начинаться с 'This is Line 1' – davidxxx
Почему 1400, 2, 3, 4 неверно, но 12, 4, 5, 6 просто нормально? – csmckelvey
Даже если вы получили последнюю позицию записи (откуда? Magic?), Это не поможет вам, когда вы хотите изменить длину старых строк, прочитать, сдвинуть последующее содержимое файла. – Holger