Java学习笔记(五)

十九、文件

    File类(java.io.File):

            构造器:

                    public File(String pathname):实例化File类的时候,必须设置好路径

//例子:
import java.io.File;
public class FileDemo11 {
	public static void main(String args[]) {
		File my = new File("d:" + File.separator); // 操作路径
		print(my) ;
	}
	public static void print(File file) { 		// 递归调用此方法
		if (file != null) {			// 增加一个检查机制
			if (file.isDirectory()) {		// 判断是否是目录
				File f[] = file.listFiles() ;// 如果是目录,则列出全部内容
				if (f != null) {		// 有可能无法列出目录中的文件 
					for (int i = 0; i < f.length; i++) {
						print(f[i]);// 继续列出内容
					}
				}
			}else{
				System.out.println(file);	/ 如果不是目录,则直接打印路径信息
			}
		}
	}
}

    字节流与字符流      

        在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

        操作流程:(以文件操作为例)

                1. 使用File类打开一个文件

                2. 通过字节流或者字符流的子类,指定输出的位置

                3. 进行读/写操作

                4. 关闭输入/输出

        字节流:

            主要操作byte类型数据,字节输出流是OutputStream,字节输入流是InputStream

//例子:
//向文件中写入字符串
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		OutputStream out = null; 		// 准备好一个输出的对象
		out = new FileOutputStream(f); 	// 通过对象多态性,进行实例化
		// 第3步:进行写操作
		String str = "Hello World!!!"; 	// 准备一个字符串
		byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组
		out.write(b); 				// 将内容输出,保存文件
		// 第4步:关闭输出流
		out.close(); 				// 关闭输出流
	}
//向文件中追加内容
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		OutputStream out = null; 			// 准备好一个输出的对象
		out = new FileOutputStream(f,true); // 此处表示在文件末尾追加内容
		// 第3步:进行写操作
		String str = "Hello World!!!"; 		// 准备一个字符串
		byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组
		for (int i = 0; i < b.length; i++) {
			out.write(b[i]); 		// 将内容输出
		}
		// 第4步:关闭输出流
		out.close(); 				// 关闭输出流
	}
//从文件中读取内容
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		InputStream input = null; 		// 准备好一个输入的对象
		input = new FileInputStream(f); 	// 通过对象多态性,进行实例化
		// 第3步:进行读操作
		byte b[] = new byte[1024]; 		// 所有的内容读到此数组之中
		input.read(b); 			// 把内容取出,内容读到byte数组之中
		// 第4步:关闭输入流
		input.close();					// 关闭输入流
		System.out.println("内容为:" + new String(b)); // 把byte数组变为字符串输出
	}

        字符流:

                在程序中一个字符相当于2个字节,字符输出流是Writer,字符输入流是Reader

//例子:
//向文件中写入数据
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		Writer out = null; 				// 准备好一个输出的对象
		out = new FileWriter(f); 			// 通过对象多态性,进行实例化
		// 第3步:进行写操作
		String str = "Hello World!!!"; 			// 准备一个字符串
		out.write(str); 					// 将内容输出
		// 第4步:关闭输出流
		out.close(); 					// 关闭输出流
	}
//向文件中追加内容
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		Writer out = null; 				// 准备好一个输出的对象
		out = new FileWriter(f,true);		// 通过对象多态性,进行实例化
		// 第3步:进行写操作
		String str = "\r\nLIXINGHUA\r\nHello World!!!" ; 	// 准备一个字符串
		out.write(str); // 将内容输出
		// 第4步:关闭输出流
		out.close(); 					// 关闭输出流
	}
//从文件中读取内容:
public static void main(String[] args) throws Exception { // 异常抛出,不处理
		// 第1步、使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
		// 第2步:通过子类实例化父类对象
		Reader reader = null; 			// 准备好一个输入的对象
		reader = new FileReader(f); 		// 通过对象多态性,进行实例化
		// 第3步:进行读操作
		char c[] = new char[1024]; 		// 所有的内容读到此数组之中
		int len = reader.read(c); 		// 将内容输出
		// 第4步:关闭输入流
		reader.close(); 				// 关闭输入流
		System.out.println(“内容为:” + new String(c, 0, len)); // 把字符数组变为字符串输出
	}

        System类对IO的支持:

            System.out:系统标准输出,一般是显示器

            System.err:错误信息输出

            System.in:标准输入,一般是键盘

例子:
//使用OutPutStream向屏幕上输出
public static void main(String[] args) {
		OutputStream out = System.out ;		// 此时的输出流是向屏幕上输出
		try {
			out.write("hello world!!!".getBytes()) ;	// 向屏幕上输出
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			out.close() ;				// 关闭输出流
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//从键盘上读取数据
public static void main(String[] args) throws Exception { // 所有异常抛出
		InputStream input = System.in;			// 从键盘接收数据 
		byte b[] = new byte[5];			// 开辟空间,接收数据
		System.out.print("请输入内容:");			// 信息提示
		int len = input.read(b);				// 接收数据
		System.out.println("输入的内容为:" + new String(b, 0, len));
		input.close();					// 关闭输入流
	}

            数据操作流:

                在io包中,提供了数据输出流(DataOutputStream)和数据输入流(DataInputStream)

例子:
//将数据写入文件中
public static void main(String[] args) throws Exception {
		DataOutputStream dos = null ;			// 声明数据输出流对象
		File f = new File("D:" + File.separator + "order.txt");// 指定文件的保存路径
		dos = new DataOutputStream(new FileOutputStream(f)) ;// 实例化数据输出流对象
		String names[] = { "衬衣", "手套", "围巾" };	// 商品名称
		float prices[] = { 98.3f, 30.3f, 50.5f };	// 商品价格
		int nums[] = { 3, 2, 1 };			// 商品数量
		for (int i = 0; i < names.length; i++) {	// 循环写入
			dos.writeChars(names[i]) ;		// 写入字符串
			dos.writeChar('\t') ;		// 加入分隔符
			dos.writeFloat(prices[i]) ;		// 写入小数
			dos.writeChar('\t') ;		// 加入分隔符
			dos.writeInt(nums[i]) ;		// 写入整数
			dos.writeChar('\n') ;		// 换行
		}
		dos.close() ;				// 关闭输出流
	}
//从文件中读取数据
while(true){
			temp = new char[200] ;
			len = 0 ;
			while((c=dis.readChar())!='\t'){	// 读取字符
				temp[len] = c;
				len++ ;
			}
			name = new String(temp,0,len) ;
			price = dis.readFloat() ;		// 读取float
			dis.readChar() ;			// 读出\t
			num = dis.readInt() ;		// 读取int
			dis.readChar() ;			// 读出\n
				System.out.printf("名称:%s;价格:%5.2f;数量:%d\n",name,price,num) ;
		}

    对象序列化

        定义:就是把一个对象变成二进制的数据流的一种方法

        好处:方便的实现对象的传输或存储

        如果一个对象想被序列化,则对象所在的类必须实现java.io.Serializable接口

        要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象输入流(ObjectInputStream),使用对象输出流输出序列化对象的步骤,有时也称为序列化,而使用对象输入流读入对象的过程,有时也称为反序列化

//例子:
//将Person类的对象保到文件中
public static void main(String[] args) throws Exception {
		File f = new File("D:" + File.separator + "test.txt");
		ObjectOutputStream oos = null;
		OutputStream out = new FileOutputStream(f);	// 文件输出流
		oos = new ObjectOutputStream(out); 		// 为对象输出流实例化
		oos.writeObject(new Person("张三", 30));		// 保存对象到文件
		oos.close(); 					// 关闭输出
	}
//从文件中将Person对象反序列化
public static void main(String[] args) throws Exception {
		File f = new File("D:" + File.separator + "test.txt");
		ObjectInputStream ois = null;
		InputStream input = new FileInputStream(f);	// 文件输入流
		ois = new ObjectInputStream(input); 		// 为对象输出流实例化
		Object obj = ois.readObject(); 			// 读取对象
		ois.close();					// 关闭输出
		System.out.println(obj);
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值