现在算算已经做java开发两年了,回过头想想还真是挺不容易的,java的东西是比较复杂但是如果基础功扎实的话能力的提升就很快,这次特别整理了点有关文件操作的常用代码和大家分享
1.文件的读取(普通方式)
(1)第一种方法
File f=new File("d:"+File.separator+"test.txt");
InputStream in=new FileInputStream(f);
byte[] b=new byte[(int)f.length()];
int len=0;
int temp=0;
while((temp=in.read())!=-1){
b[len]=(byte)temp;
len++;
}
System.out.println(new String(b,0,len,"GBK"));
in.close();
这种方法貌似用的比较多一点
(2)第二种方法
File f=new File("d:"+File.separator+"test.txt");
InputStream in=new FileInputStream(f);
byte[] b=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
System.out.println(new String(b,0,len,"GBK"));
}
in.close();
2.文件读取(内存映射方式)
File f=new File("d:"+File.separator+"test.txt");
FileInputStream in=new FileInputStream(f);
FileChannel chan=in.getChannel();
MappedByteBuffer buf=chan.map(FileChannel.MapMode.READ_ONLY, 0, f.length());
byte[] b=new byte[(int)f.length()];
int len=0;
while(buf.hasRemaining()){
b[len]=buf.get();
len++;
}
chan.close();
in.close();
System.out.println(new String(b,0,len,"GBK"));
这种方式的效率是最好的,速度也是最快的,因为程序直接操作的是内存
3.文件复制(边读边写)操作
(1)比较常用的方式
package org.lxh;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class ReadAndWrite {
public static void main(String[] args) throws Exception {
File f=new File("d:"+File.separator+"test.txt");
InputStream in=new FileInputStream(f);
OutputStream out=new FileOutputStream("e:"+File.separator+"test.txt");
int temp=0;
while((temp=in.read())!=-1){
out.write(temp);
}
out.close();
in.close();
}
}
(2)使用内存映射的实现
package org.lxh;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ReadAndWrite2 {
public static void main(String[] args) throws Exception {
File f=new File("d:"+File.separator+"test.txt");
FileInputStream in=new FileInputStream(f);
FileOutputStream out=new FileOutputStream("e:"+File.separator+"test.txt");
FileChannel fin=in.getChannel();
FileChannel fout=out.getChannel();
//开辟缓冲
ByteBuffer buf=ByteBuffer.allocate(1024);
while((fin.read(buf))!=-1){
//重设缓冲区
buf.flip();
//输出缓冲区
fout.write(buf);
//清空缓冲区
buf.clear();
}
fin.close();
fout.close();
in.close();
out.close();
}
}