Я делаю следующее: - создание пустого файла - блокировка файла - запись в файл - чтение назад содержаниене в состоянии прочитать файл с помощью java.nio.channels.FileChannel
public class TempClass {
public static void main(String[] args) throws Exception{
File file = new File("c:/newfile.txt");
String content = "This is the text content123";
if (!file.exists()) {
file.createNewFile();
}
// get the content in bytes
byte[] contentInBytes = content.getBytes();
FileChannel fileChannel = new RandomAccessFile(file, "rw").getChannel();
FileLock lock = fileChannel.lock();
//write to file
fileChannel.write(ByteBuffer.wrap (contentInBytes));
//force any updates to this channel's file
fileChannel.force(false);
//reading back file contents
Double dFileSize = Math.floor(fileChannel.size());
int fileSize = dFileSize.intValue();
ByteBuffer readBuff = ByteBuffer.allocate(fileSize);
fileChannel.read(readBuff);
for (byte b : readBuff.array()) {
System.out.print((char)b);
}
lock.release();
}
}
Однако Я вижу, что файл правильно написан с указанным мной контентом, но когда я его прочитал, он печатает квадратные символы для всех фактических символов в файле. Этот квадрат символ char
эквивалент байта 0:
System.out.print((char)((byte)0));
Что здесь не так?
yess great you just pin point, я должен 'fileChannel.position (0);' после 'fileChannel.write()' и перед 'fileChannel.read (readBuff);' – Mahesha999
есть ли способ, которым я могу удалить файл, в то время как у меня есть блокировка на нем, так как я просто хочу прочитать файл, а затем удалить его, не разрешая кому-либо еще читать его снова. – Mahesha999
Ну, просто используйте метод 'File.delete()' после того, как вы отпустите блокировку ... Я очень сомневаюсь, что какая-то программа получит блокировку между релизом блокировки и методом удаления, если они являются позициями сразу после друг друга. 'FileChannel' зарезервирован для выполнения ввода-вывода в файл, для его удаления используется сам объект« Файл ». – initramfs