一、Java-IO 的分类
1、基于字节操作的I/O接口:InputStream和OutputStream
2、基于字符操作的I/O接口:Writer和Reader
3、基于磁盘操作的I/O接口:File
4、基于网络操作的I/O接口:Socket(不在java.io包下)
二、File
参考博客:http://www.jb51.net/article/36126.htm
File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问。支持文件的复制,删除,移动,重命名等操作。
RandomAccessFile
RandomAccessFile不属于InputStream和OutputStream类系的,是直接继承Object的一个类。能够实现文件的随机读写。
- 文件打开方式分为:只读方式(“r”),还是以读写方式(“rw”)等;
- 保存了一个文件位置指针,指向文件正在读或者正在写的位置。获取指针位置getFilePointer( ),移动指针seek( ),判断文件大小length( )、skipBytes()跳过多少字节数。
三、InputStream和OutputStream
InputStream类图:
OutputStream类图:
四、Reader和Writer
Reader类图:
Writer类图:
四、对象的序列化
FileDemo
1、递归列出所有文件
/**
* 递归列出所有文件
*/
public static void showDir(File dir){
// System.out.println(dir);
File[] files =dir.listFiles();
if(files!=null){
for(File file:files){
if(file.isDirectory())
showDir(file);
// else
// System.out.println(file);
}
}
}
2、文件过滤
/**
* 文件过滤(FilenameFilter),只显示以 “.sys” 结尾的文件
*/
public void fileFilter(){
File[] files =File.listRoots();
for(File file:files){
// System.out.println(file);
if(file.length()>0){
String[] filenames =file.list(new FilenameFilter(){
//file 过滤目录 name 文件名
public boolean accept(File file,String filename){
return filename.endsWith(".sys");
}
});
for(String filename:filenames){
System.out.println(filename);
}
}
}
}
3、拷贝文件
/**
* 找出d盘下所有的 .db 文件,拷贝至 d:\jad 目录下,并将所有文件的类型由.java 修改为.jad 。
*/
public static void moveFile(File dir){
File[] files=dir.listFiles();
if(files==null) return;
for(File file:files){
if(file.isDirectory())
moveFile(file);
else{
if(file.getName().endsWith(".db")){
System.out.println(file);
file.renameTo(new File("d:\\jad\\"+
file.getName().substring(0,file.getName().lastIndexOf('.'))+".jad"));
}
}
}
}
复制文件
public static void copyFile(File srcFile,File destFile) throws IOException{
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(destFile);
byte[] buf = new byte[1024];
int len;
while((len=in.read(buf, 0, buf.length))!=-1){
out.write(buf, 0, len);
}
out.close();
in.close();
}
“`