读书人

Java文件随机读取有关问题~

发布时间: 2013-07-09 09:50:48 作者: rapoo

Java文件随机读取问题~~~~~急!!!在线等
很久没弄文件随机读取了,这回遇到需求,好了 不嗦 直接上代码:


没有输出任何东西,如果设置skipBytes(0);就能输出了,
不知道这是什么问题?该如何解决才好呢? Java 文件随机读取 RandomAccessFile skipBytes
[解决办法]
跳过中文是把?

RandomAccessFile randomAccessFile;
try
{
randomAccessFile = new RandomAccessFile("RandomAccess.txt", "rw");
//设置文件的内容为0字节
randomAccessFile.setLength(0);
//循环写入
String loveStr = "我爱你!i love you!";
byte[] bArr = loveStr.getBytes();
for (int i = 0; i < 5; i++)
{


randomAccessFile.write(bArr);
}
System.out.println("=>" + randomAccessFile.getFilePointer());
// 重新把文件指针定位到开始处
randomAccessFile.seek(0);
System.out.println("=>" + randomAccessFile.getFilePointer());
//跳过中文?
byte[] zhByte = "我爱你!".getBytes();
randomAccessFile.skipBytes(zhByte.length);
System.out.println("=>" + randomAccessFile.getFilePointer());
byte[] data = new byte[bArr.length - zhByte.length];
while ((randomAccessFile.read(data)) != -1)
{
String str = new String(data,"GBK");
System.out.println(str);
randomAccessFile.skipBytes(zhByte.length);
}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}


------解决方案--------------------


引用:
Quote: 引用:

跳过中文是把?

RandomAccessFile randomAccessFile;
try
{
randomAccessFile = new RandomAccessFile("RandomAccess.txt", "rw");
//设置文件的内容为0字节
randomAccessFile.setLength(0);
//循环写入
String loveStr = "我爱你!i love you!";
byte[] bArr = loveStr.getBytes();
for (int i = 0; i < 5; i++)
{
randomAccessFile.write(bArr);
}
System.out.println("=>" + randomAccessFile.getFilePointer());
// 重新把文件指针定位到开始处
randomAccessFile.seek(0);
System.out.println("=>" + randomAccessFile.getFilePointer());
//跳过中文?
byte[] zhByte = "我爱你!".getBytes();
randomAccessFile.skipBytes(zhByte.length);
System.out.println("=>" + randomAccessFile.getFilePointer());
byte[] data = new byte[bArr.length - zhByte.length];
while ((randomAccessFile.read(data)) != -1)
{
String str = new String(data,"GBK");
System.out.println(str);


randomAccessFile.skipBytes(zhByte.length);
}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}



对了,这个方法是可行的;
后面我又换了方式用这个代码测试了下;
就是把写入的部分注释掉,
即:
// randomAccessFile.write(bArr);
意思就是不在程序中写入,而是直接到txt记事本中去手动写进去,如图:
Java文件随机读取有关问题~
然后再把读取模式由rw 改为只读取 r ;
这个时候运行会出现个错误:
java.io.IOException: 拒绝访问。
当再把模式改为rw才可以操作,
只是改为rw,运行一次后控制台没有输出跳过汉字后剩下的数据,当然也没有报错,而且还会把txt里面的数据都删掉,变成空白了!
这个是什么原因呢?


你改为只读模式了,就不能再使用setLength方法了,你把setLength(0)执行,就等于把内容都请空了。

读书人网 >J2EE开发

热点推荐