【发布时间】:2017-03-16 21:06:38
【问题描述】:
我在尝试使用 RandomAcessFile 读取和写入同一个文件时遇到问题。
我正在从一个文件中读取 16 个字节的块,并将它们写入同一文件的给定位置(例如第 256 个)。
问题出在ra.write(b) 行。执行以下行时,我在文本编辑器 Kate(我正在使用 Linux Manjaro)上收到一条消息:
文件 /home/mite/IdeaProjects/IspitJuni2015/dat.txt 以 UTF-8 编码打开,但包含无效字符。 它设置为只读模式,因为保存可能会破坏其内容。 使用选择的正确编码重新打开文件,或者在工具菜单中再次启用读写模式以便能够对其进行编辑。
它会打开只读模式。 我也尝试手动取消选中 Kate 中的只读权限,但它也不起作用。似乎是什么问题?
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之后。删除它。 -
嗨米特科。下面已经做了一个回答,你能回复一下吗,回复一下对你有没有帮助?
-
@halfer 嗨,我留下重播和可能的解决方案。你可以看看下面
-
好的,谢谢。习惯上,虽然不是严格强制性的,但也对帮助您的人进行 ping 操作。表达感激之情或评论最终解决方案对您有用是很好的,因此张贴者知道他们的努力得到了赞赏。
标签: java utf-8 readonly randomaccessfile