用java怎么从指定文件中的指定位置开始读取指定长度的内容?谢谢

时间:2022-06-06 12:50:52
用java怎么从指定文件中的指定位置开始读取指定长度的内容?谢谢

9 个解决方案

#1


FileInputStream fis = FileInputStream(File file);指定文件

fis.skip(long n);指定位置

byte[] bs = new byte[int length];  指定长度
fis.read(bs); 得到内容

#2


RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的

#3


引用 2 楼 MT502 的回复:
RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的

这个不错
楼上的楼上也行

#4



public class Test { 

public static void main(String[] args) { 
    System.out.println(read(3,9));

public static String read(int from ,int to){
String result="";
try{
FileInputStream fis=new FileInputStream("d:\\ss.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
bis.skip(from-1);
int c=0;
for(int i=0;(i<to-from)&&(c=bis.read())!=-1;i++){
result+=(char)c;
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return result;
}

#5


在标准的J2SE中,实现LZ的需求,支持使用RandomAccessFile类

RandomAccessFile r = new RandomAccessFile(new File("c:/1.txt", "r"));//只读方式打开文件
r.seek(100);//指定下一次的开始位置
byte[] bs = new byte[1024];
r.read(bs);
r.readChar();
r.readInt();//读取一个整数

#6



public class Test { 

public static void main(String[] args) { 
    System.out.println(read(3,9));

public static String read(int from ,int to){
String result="";
byte[] result2=new byte[to-from+1];
try{
FileInputStream fis=new FileInputStream("d:\\ss.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
 bis.skip(from-1);
bis.read(result2, 0, to-from+1);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return new String(result2);
}


second

#7


RandomAccessFile对于楼主的情况来说绝对好用!!

byte[] b = new byte[int length];  
fis.read(b); 

不过注意read一次,游标就会移动,如果读到你想要的东西要修改或者在该处写入 就要提前定义getFilePointer() ,再用seek()回到该游标位置

#8


RandomAccessFile

下面的seek(int position)
代码热心人已经贴了,我就不贴了。

#9


引用 2 楼 mt502 的回复:
RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的


注意二楼的方法是错误的,已经验证了。(原因:不管始FileInputStream还是RandomAccessFile中方法:read(byte[],int off, int len)中,off都是指在byte中的偏移(即开始位置),并不是指从制定位置开始。可以参考java的api文档。)
一楼和6楼的是正确的。

#1


FileInputStream fis = FileInputStream(File file);指定文件

fis.skip(long n);指定位置

byte[] bs = new byte[int length];  指定长度
fis.read(bs); 得到内容

#2


RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的

#3


引用 2 楼 MT502 的回复:
RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的

这个不错
楼上的楼上也行

#4



public class Test { 

public static void main(String[] args) { 
    System.out.println(read(3,9));

public static String read(int from ,int to){
String result="";
try{
FileInputStream fis=new FileInputStream("d:\\ss.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
bis.skip(from-1);
int c=0;
for(int i=0;(i<to-from)&&(c=bis.read())!=-1;i++){
result+=(char)c;
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return result;
}

#5


在标准的J2SE中,实现LZ的需求,支持使用RandomAccessFile类

RandomAccessFile r = new RandomAccessFile(new File("c:/1.txt", "r"));//只读方式打开文件
r.seek(100);//指定下一次的开始位置
byte[] bs = new byte[1024];
r.read(bs);
r.readChar();
r.readInt();//读取一个整数

#6



public class Test { 

public static void main(String[] args) { 
    System.out.println(read(3,9));

public static String read(int from ,int to){
String result="";
byte[] result2=new byte[to-from+1];
try{
FileInputStream fis=new FileInputStream("d:\\ss.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
 bis.skip(from-1);
bis.read(result2, 0, to-from+1);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return new String(result2);
}


second

#7


RandomAccessFile对于楼主的情况来说绝对好用!!

byte[] b = new byte[int length];  
fis.read(b); 

不过注意read一次,游标就会移动,如果读到你想要的东西要修改或者在该处写入 就要提前定义getFilePointer() ,再用seek()回到该游标位置

#8


RandomAccessFile

下面的seek(int position)
代码热心人已经贴了,我就不贴了。

#9


引用 2 楼 mt502 的回复:
RandomAccessFile的public int read(byte[] b,int off,int len) throws IOException也挺方便的


注意二楼的方法是错误的,已经验证了。(原因:不管始FileInputStream还是RandomAccessFile中方法:read(byte[],int off, int len)中,off都是指在byte中的偏移(即开始位置),并不是指从制定位置开始。可以参考java的api文档。)
一楼和6楼的是正确的。