求一个操作文本的效率解决方案,困扰,解决狂给分. 赞成 JavaVsNet(JavaVsNet)的意见 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 文件能重后面读么?只能全部读出来或者重头读吧我建议一次把他全部读取到一个String里,不用readline()的方法,用FileReader读取,速度快public String readFile(String file) throws IOException{FileReader fr = new FileReader(file);char[] buffer = new char[1024*8];int b = 0;StringBuffer sb = new StringBufer();while(true){ b = fr.read(buffer); if(b<0) break; sb.append(sb,0,b);}return sb.toString();public void close(FileReader fr){ try{fr.close();}catch(Exception e){}finally{fr = null;}}然后再返回的String中查找如果你确定要查找的字符串在文本末尾段的话,可以用下面的方法//offset,就是你设定的偏移量,如果你的标记载1m以后的字符串中,那么设定offset为1024*1024public String readFile(String file,int offset) throws IOException{FileReader fr = new FileReader(file);char[] buffer = new char[1024*8];char[] off = new char[offset];int b = 0;b = fr.read(off);if(b<0) return null;off = null;StringBuffer sb = new StringBufer();while(true){ b = fr.read(buffer); if(b<0) break; sb.append(sb,0,b);}return sb.toString(); hykwolf(Yankang Hu) 的方法不错还有没有更厉害的? 利用java.nio.FileChannel中的方法map 再说一下,第二个方法的read(off);的办法不好public String readFile(String file,int offset) throws IOException{FileReader fr = new FileReader(file);char[] buffer = new char[1024*8];int b = 0;fr.skip(offset);//赫赫,应该用这个方法才对,跳过StringBuffer sb = new StringBufer();while(true){ b = fr.read(buffer); if(b<0) break; sb.append(sb,0,b);}return sb.toString(); 我无法编译通过你的方法,StringBuffer的append有问题?我是jdk1.40import java.io.*;class MFLFile{ public static void main(String[] args) { System.out.println("Hello World!"); } public String readFile(String file) throws IOException{ FileReader fr = new FileReader(file); char[] buffer = new char[1024*8]; int b = 0; StringBuffer sb = new StringBuffer(); while(true){ b = fr.read(buffer); if(b<0) break; sb.append(sb,0,b); } return sb.toString(); } public void close(FileReader fr){ try{ fr.close(); }catch(Exception e){} finally{ fr = null; } }}错误信息 MFLFile.java:19: cannot resolve symbolsymbol : method append (java.lang.StringBuffer,int,int)location: class java.lang.StringBuffer sb.append(sb,0,b); ^ sigh..写错了sb.append(buffer,0,b); 小球在一个框里做连续的碰撞运动 java调用存储过程 lucene的应用问题,代码可能长了些!!? 几道笔试题 求助:java中哪个类能获得当前计算机名 求一个例子??? 在JPanel上画图时为何paint()方法会被多次调用? 如何把回车的焦点落在一个JBUTTON上? 网络编程还用socket吗? 为什么接口明明没有方法体,但是还有方法描述? 请问如何调用包中的类?(初学迷茫中。。。) 小女子又有一问题(特简单的),能否再帮一把
只能全部读出来或者重头读吧
我建议一次把他全部读取到一个String里,不用readline()的方法,用FileReader读取,速度快
public String readFile(String file) throws IOException{
FileReader fr = new FileReader(file);
char[] buffer = new char[1024*8];
int b = 0;
StringBuffer sb = new StringBufer();
while(true){
b = fr.read(buffer);
if(b<0) break;
sb.append(sb,0,b);
}
return sb.toString();
public void close(FileReader fr){
try{fr.close();}catch(Exception e){}finally{fr = null;}
}
然后再返回的String中查找
如果你确定要查找的字符串在文本末尾段的话,可以用下面的方法
//offset,就是你设定的偏移量,如果你的标记载1m以后的字符串中,那么设定offset为1024*1024
public String readFile(String file,int offset) throws IOException{
FileReader fr = new FileReader(file);
char[] buffer = new char[1024*8];
char[] off = new char[offset];
int b = 0;
b = fr.read(off);
if(b<0) return null;
off = null;
StringBuffer sb = new StringBufer();
while(true){
b = fr.read(buffer);
if(b<0) break;
sb.append(sb,0,b);
}
return sb.toString();
还有没有更厉害的?
public String readFile(String file,int offset) throws IOException{
FileReader fr = new FileReader(file);
char[] buffer = new char[1024*8];
int b = 0;
fr.skip(offset);//赫赫,应该用这个方法才对,跳过
StringBuffer sb = new StringBufer();
while(true){
b = fr.read(buffer);
if(b<0) break;
sb.append(sb,0,b);
}
return sb.toString();
我是jdk1.40import java.io.*;class MFLFile
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
public String readFile(String file) throws IOException{
FileReader fr = new FileReader(file);
char[] buffer = new char[1024*8];
int b = 0;
StringBuffer sb = new StringBuffer();
while(true){
b = fr.read(buffer);
if(b<0) break;
sb.append(sb,0,b);
}
return sb.toString();
} public void close(FileReader fr){
try{
fr.close();
}catch(Exception e){}
finally{
fr = null;
}
}
}
错误信息
MFLFile.java:19: cannot resolve symbol
symbol : method append (java.lang.StringBuffer,int,int)
location: class java.lang.StringBuffer
sb.append(sb,0,b);
^
sb.append(buffer,0,b);