RandomAcessFile을 사용하여 동일한 파일을 읽고 쓰려고 할 때 문제가 발생합니다.바이트 블록 쓰기 후 파일 변경 권한
파일에서 16 바이트 블록을 읽고 주어진 위치 (예 : 256 번째)에 같은 파일에 씁니다.
문제는 ra.write(b)
라인에 있습니다. 다음 줄이 실행되면 내가 말하는 텍스트 편집기 케이트에 메시지 (I 리눅스 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'을 생성 한 후에는 * 사용하기 쉽습니다. 그것을 제거하십시오. – EJP
안녕하세요 Mitko. 아래에 답변이 있습니다. 답변을 드릴 수 있습니까? 답이 도움이되었는지 여부에 관해 답장을 보낼 수 있습니까? – halfer
@halfer 안녕하세요, 나는 재생과 가능한 해결책을 떠납니다. 너는 볼 수있다 –