Я хочу, чтобы достичь следующих в Java области:Как удалить содержимое файла (не файл, нужно же индексный дескриптор) в Java, а затем обрезает файл до определенного размера (скажем, 38 байт)
- Open файл ненулевого размера.
- Удалить все содержимое.
Обрезать тот же файл заданного размера (скажем, 38 байт ....)
Так или иначе, если я удалить содержимое (работы), даже если я выдаю усечение после этого, его не чтят и файл размер остается 0.
String fileName = "/home/me/dummy/a.1"; try { Long size = 0L; // file exists already RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); // set the file pointer at 0 position raf.seek(0); // print current length size = raf.length(); System.out.println("Before deleting - fileSize = " + size); // set the file length to 0 raf.setLength(0); // print the new length System.out.println("After deleting - filesize = " + raf.length()); raf.close(); // truncating file to Size = 38 bytes FileChannel outChan = new FileOutputStream(fileName, true).getChannel(); System.out.println("Before Truncating - File size = "+outChan.size()); outChan.truncate(38); System.out.println("Aftre truncating - File size = "+outChan.size()); outChan.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
My O/Ps:
Перед удалением - FileSize = 21
После удаления - размер файла = 0
Перед Усечение - Размер файла = 0
AFTRE усечения - Размер файла = 0
Я попробовал несколько других вариантов, как:
Усечение файла до 0, а затем 38 байт (ненулевое значение, которое я хочу)
// truncating file to Size = 0 bytes and then to 38 bytes FileChannel outChan = new FileOutputStream(fileName, true).getChannel(); System.out.println("Before Truncating - File size = "+outChan.size()); outChan.truncate(0); outChan.truncate(38); System.out.println("Aftre truncating - File size = "+outChan.size()); outChan.close();
Не работает. Размер файла остается 0. Выполняется только 1-й усечение.
2. Обрежьте файл на 0, закройте канал, снова откройте канал и обрезайте до 38 байт.
FileChannel outChan = new FileOutputStream(fileName, true).getChannel();
System.out.println("Before Truncating - File size = "+outChan.size());
outChan.truncate(0);
outChan.close();
FileChannel outChan1 = new FileOutputStream(fileName, true).getChannel();
outChan1.truncate(38);
System.out.println("Aftre truncating - File size = "+outChan1.size());
outChan.close();
Не работает. Размер файла остается 0. Выполняется только 1-й усечение.
Ваши данные о том, как я могу удалить содержимое файла и усечь его до ненулевого размера. Было бы здорово, если бы я мог сделать это только в одном открытии, в отличие от его открытия (RandomAccessFile, а затем в качестве FileChannel).
Спасибо.
Разве это не то, что делает OP? –
Закрыть, но не то же самое. Он закрывает файл после обрезания до 0, затем открывает его и пытается «обрезать» уже сохраненный файл. Что еще более важно, это работает. – gknicker