Thinking in java 琐碎知识点之 I/O流 、对象序列化(一)

2014-11-23 21:43:47 · 作者: · 浏览: 28
Java I/O流 、对象序列化
1、File类
此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。
File类可以新建、删除和重命名文件和目录,但是File不能访问文件本身的内容,这要使用IO流。
File对象的createNewFile()方法在磁盘上创建真实的文件
例程:FileTest.java
import java.io.*;
public class FileTest {
	public static void main(String[] args) throws IOException {
		File file=new File("test1");//此相对路径即表示相对JVM的路径
		File file2=new File(".");//以当前路径来创建一个File对象
		File file3=new File("F:\\workplace\\IO\\jaa.txt");//系统不一定就存在jaa.txt这个文件
		System.out.println("file.getName()\t"+file.getName());
		System.out.println("file2.getName()\t"+file2.getName());
		System.out.println("file3.getName()\t"+file3.getName());
		System.out.println("file.getParent()\t"+file.getParent());
		System.out.println("file2.getParent()\t"+file2.getParent());
		System.out.println("file3.getParent()\t"+file3.getParent());
		System.out.println("file.getAbsolutePath()\t"+file.getAbsolutePath());
		System.out.println("file.getAbsoluteFile()\t"+file.getAbsoluteFile());
		System.out.println("file.getAbsoluteFile().getParent()\t"+file.getAbsoluteFile().getParent());
		System.out.println("file2.getAbsolutePath()\t"+file2.getAbsolutePath());
		System.out.println("file3.getAbsolutePath()\t"+file3.getAbsolutePath());
		File file4=new File("F://FileTest//test1.doc");
		System.out.println("file4.exists()\t"+file4.exists());
		//在系统中创建一个文件,注意test1.doc前面的目录一定要是真实存在的,否则执行createNewFile方法会报错
		file4.createNewFile();
		System.out.println("file4.exists()\t"+file4.exists());
		File file5=new File("F:\\zpc");
		System.out.println("file5.mkdir()"+file5.mkdir());//在系统中创建一个File对象所对应的目录
		File file6=new File("F:\\workplace");
		String fileList[]=file6.list();
		System.out.println("=======F:\\workplace目录下的所有文件和路径如下=======");
		for(String s:fileList){
			System.out.println(s);
		}
		//File的静态方法listRoots列出所有的磁盘根路径
		File[] roots=File.listRoots();
		System.out.println("======系统所有根路径=======");
		for(File f:roots){
			System.out.println(f);
		}
		
		//在F:\\zpc目录下创建一个临时文件,并指定当JVM退出时删除该文件
		File temFile=File.createTempFile("zpca", ".txt",file5);
		temFile.deleteOnExit();
		//通过挂起当前线程5秒,会看到临时文件被创建5秒后由于程序执行完毕,JVM退出,该文件又自动删除
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}


文件过滤器:
import java.io.*;
public class FileNameFilterTest {
	public static void main(String[] args) {
		File file=new File("F:\\workplace\\collection\\src");
		String fileList[]=file.list(new MyFilenameFilter());
		for(String s:fileList){
			System.out.println(s);
		}
	}
}


class MyFilenameFilter implements FilenameFilter{
	public boolean accept(File dir, String name) {
		return name.endsWith(".java")||new File(name).isDirectory();
	}
}


2. io流分类

读取一个文件,输入流
写出一个文件,输出流

字符流:专门用于读写文本文件的(记事本可以正常打开),字符流操作的最小数据单元是16位的字符 查询本机上的编码表(GBK)

问题?word excel是不是文本文件
常见的文本文件: .txt .java html xml sql

字节流:操作的最小单元是8位的字节,最小的存储单位1个字节
1个字节8个二进制位
任意文件
问题?能操作文件夹吗 (不能)

3、Java中的io继承体系

继承体系,类与类之间继承关系,子类中的共性提取成的父类
父类中定义的功能,是这个体系中的最共性的内容
学习一个继承体系的时候,找父类去看,建立子类对象

字符流:
输出流,写入文件的抽象基类(体系中的最高层的父类) Writer
输入流,读取文件的抽象基类 Reader

字节流:
输出流,写入文件的抽象基类 OutputStream
输入流,读取文件的抽象基类 InputStream

4. 字符流的输入流(读文件)