先前使用一直很混乱的使用过这些方法,但都没有好好做过总结。
这两天趁有空,小结一下。
1、输入输出流
说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件,或者读取请求url返回的数据等), 被写入的对象为输出流(某文件,或写入请求url鞥)。
2、读文件的总分为两种方式: 使用输入流InputStream、使用Reader
1)、使用InputStream;
InputStream为抽象类,具体读取文件需要使用其实现类,这里又可分为两种分支: FileInputStream、BufferedInputStream,
其中三者的继承关系为
a、请看使用FileInputStream读取文件的实例
//使用FileInputStream
public void fileInputStream(){
File file = new File("D:\\tempTest\\xml\\5008.xml");
File fileTo = new File("D:\\tempTest\\xml\\5008_to.xml");
FileInputStream fin = null;
FileOutputStream fos = null;
try{
fin = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len=0;
fos = new FileOutputStream(fileTo);
while((len = fin.read(buffer))!= -1){ //1024个字节读取
fos.write(buffer, 0, len);
//System.out.write(buffer, 0, len);
}
} catch (Exception e){
e.printStackTrace();
} finally {
try {
if (fin != null) {
fin.close();
}
if (fos != null) {
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
b、使用 BufferInputStream
public void bufferedInputStream(){
File file = new File("D:\\tempTest\\xml\\5008.xml");
File fileTo = new File("D:\\tempTest\\xml\\5008_to.xml");
BufferedInputStream bin = null;
BufferedOutputStream bos = null;
try{
//使用BufferedInputStream比FileInputStream效率高
bin = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
int len=0;
bos = new BufferedOutputStream(new FileOutputStream(fileTo));
while((len = bin.read(buffer))!=-1){ //1024个字节读取
bos.write(buffer, 0, len);
//System.out.write(buffer, 0, len);
}
} catch (Exception e){
e.printStackTrace();
} finally {
try {
if (bin != null) {
bin.close();
}
if (bos != null) {
bos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:这两种方式适合于读取二级制文件,如图片,声音、视频