嘗試使用RandomAcessFile讀取和寫入同一文件時出現問題。寫入字節塊後的文件更改權限
我正在從一個文件讀取16個字節的塊,並將它們寫入給定位置(例如256個)的同一個文件中。
問題出在ra.write(b)
一行。當下面一行是執行我上了文本編輯器凱特消息(我使用Linux Manjaro)說:
文件/home/mite/IdeaProjects/IspitJuni2015/dat.txt與打開UTF-8編碼但包含無效字符。 它被設置爲只讀模式,因爲保存可能會破壞其內容。 可以選擇正確的編碼重新打開文件,也可以在工具菜單中再次啓用讀寫模式以編輯它。
它打開只讀模式。 另外我嘗試手動取消在凱特只讀權限,但它也不工作。什麼似乎是問題?
public static byte[] read(long i) throws IOException{
File in = new File("./dat.txt");
RandomAccessFile ra = new RandomAccessFile(in,"rw");
byte[] readObj= new byte[16];
if (i>in.length()/16)
{
return null;
}
ra.seek(i*16);
ra.read(readObj);
ra.close();
return readObj;
}
public static void write(long i, byte[] obj) throws IOException{
File out=new File("./dat.txt");
RandomAccessFile ra=new RandomAccessFile(out,"rw");
if (!out.exists())
{
out.createNewFile();
}
long size=out.length();
if (i*16>size)
{
ra.seek(out.length());
for (long j=size;j<i*16;j+=16)
{
byte[] b=new byte[16];
ra.write(b);
}
}
ra.seek((i)*16);
System.out.println(new String(obj));
ra.write(obj);
ra.close();
}
public static void main(String[] args) throws IOException{
write(35,read(4));
}
'out.exists()/ createNewFile()'塊在最好情況下毫無意義,但尤其如此*在構建了'RandomAccessFile'之後。去掉它。 – EJP
Hi Mitko。答案已在下面提出,你是否能夠回覆它,並回答它是否幫助你? – halfer
@halfer嗨,我留下重播和可能的解決方案。你可以看下面的 –