Java 流学习-----学习笔记整理

  • 流概述

  1. 流是一组有序的数据序列,根据操作的类型,可分为输入流输出流两种
  2. I/OInput/Output)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地
  3. I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等

  

  • 输入输出流

    输入流概念

1.InputStream类是字节输入流的抽象类,是所有字节输入流的父类

2.InputStream类中所有方法遇到错误时都会引发IOException异常

3.Java中的字符是Unicode编码,是双字节的

4.InputStream是用来处理字节的,在处理字符文本时不是很方便。Java为字符文本的输入提供了专门一套单独的类Reader,但Reader类并不是InputStream类的替换者,只是在处理字符串时简化了编程

5.Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类

  输出流概念

1.OutputStream类是字节输入流的抽象类,此抽象类是表示输出字节流的所有类的超类

2.OutputStream类中的所有方法均返回void,在遇到错误时会引发IOException异常

3.常用的操作方法

3.Writer类是字符输出流的抽象类,你会吗所有字符输出类的实现都是它的子类

  • File类

 

  •          文件的创建与删除

                 可以使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象

  1.    File(String pathname)
  2.    File(String parent , String child)
  3.    File(File f , String child)
  •           获取文件信息

package com.liu.java;

import java.io.File;

public class FileTest {
//主方法
	public static void main(String[] args){
		//创建文件对象
		File file = new File("word.txt");
		//如果该文件存在
		if(file.exists()){
			//将文件删除
			file.delete();
			//输出的提示信息
			System.out.println("文件已删除");
		}else{
			//如果文件不存在
			try{
				//try语句块捕捉可能出现的异常
				//创建该文件文件
				file.createNewFile();
				System.out.println("文件以创建");
			
				System.out.println("文件修改的最后时间:"+file.lastModified());
				System.out.println("获取文件的名称"+file.getName());
				System.out.println("获取文件的长度(单位:字节):"+file.length());
				System.out.println("获取文件的绝对路径:"+file.getAbsolutePath());
				boolean hidden = file.isHidden(); // 判断文件是否是隐藏文件
				System.out.println("是否隐藏文件夹:" + hidden);
			}catch(Exception e){//处理该异常
				//输出异常信息
				e.printStackTrace();
				
			}
		}
	}

	public void setDefaultCloseOperation(int exitOnClose) {
		// TODO Auto-generated method stub
		
	}
}
  • 文件的输入输出流

1FileInputStreamFileOutputStream

  •  FileInputStream类与FileOutputStream类都是用来操作磁盘文件
  • 如果用户的文件读取需求比较简单,则可以使用FileInputStream类。该类继承自InputStream
  • FileOutputStream类与FileInputStream类对应,提供了基本的文件写入能力
  • FileOutputStream类是OutoputStream类的子类

2FileReader类和FileWriter

  • 使用FileOutputStream类向文件中写入数据
  • 使用FileInputStream类从文件中将内容读出来
  • 不足:即这两个类都只提供了对字节或字节数组的读取方法
  • 汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象用字符流Reader或Writer类可避免
  • FileReaderFileWriter字符流对应了FileInputStreamFileOutputStream
  • FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭
package com.liu.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;


public class FileTest01 {

	//主方法
	public static void main(String[] args){
		File file = new File("word.txt");//创建一个文件对象
		//捕捉异常
		try{
			FileOutputStream out = new FileOutputStream(file);//创建文件输出对象
			byte buy[] ="日照香炉生紫烟。".getBytes();//创建byte(字节)型的数组
			out.write(buy);//将buy写入文件
			
			out.close(); //将流关闭
			
		}catch(Exception e){//catch语句处理异常
			e.printStackTrace();
			
		}
		try{
			FileInputStream in = new FileInputStream(file);//创建一个输入文件对象;
		
			byte byt[] =new byte[1024];//创建一个byte型的数组;
			int len =in.read(byt);//读取数据
			System.out.println("输出文件中的信息:"+ new String(byt,0,len));//输出文件信息
			in.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
}
   }
  • 带缓存的输入输出流

1BufferedInputStream类与BufferedOutputStream

  • BufferedInputStream类可以对任何的InputStream类进行带缓存区的包装以达到性能的优化。
  • 使用BufferedOutputStream输出信息和往OutputStream输出信息完全一样,只不过BufferedOutputStream有一个flush()方法用来将缓存区的数据强制输出完。

2BufferedReaderBufferedWriter

  • BufferedReader类与BufferedWriter类分别继承Reader类与Writer类。这两个类同样具有内部缓存机制,并可以以行为单位进行输入输出。
  • 在使用BufferedWriter类的Write()方法时,数据并没有立刻被写入至输出流中,而是首先进入缓存区中。如果想立刻将缓存区中的数据写入输出流中,一定要调用flush()方法

package com.liu.java;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;



public class fileTest03{public static void main(String args[]) { // 主方法
	// 定义字符串数组
	String content[] = { "你好", "你好吗", "你好呀" };
	File file = new File("word.txt"); // 创建文件对象
	try {
		FileWriter fw = new FileWriter(file); // 创建FileWriter类对象
		// 创建BufferedWriter类对象
		BufferedWriter bufw = new BufferedWriter(fw); 
		for (int k = 0; k < content.length; k++) { // 循环遍历数组
			bufw.write(content[k]); // 将字符串数组中元素写入到磁盘文件中
			bufw.newLine(); // 将数组中的单个元素以单行的形式写入文件
		}
		bufw.close(); // 将BufferedWriter流关闭
		fw.close(); // 将FileWriter流关闭
	} catch (Exception e) { // 处理异常
		e.printStackTrace();
	}
	try {
		FileReader fr = new FileReader(file); // 创建FileReader类对象
		// 创建BufferedReader类对象
		BufferedReader bufr = new BufferedReader(fr);
		String s = null; // 创建字符串对象
		int i = 0; // 声明int型变量
		// 如果文件的文本行数不为null,则进入循环
		while ((s = bufr.readLine()) != null) { 
			i++; // 将变量做自增运算
			System.out.println("第" + i + "行:" + s); // 输出文件数据
		}
		bufr.close(); // 将FileReader流关闭
		fr.close(); // 将FileReader流关闭
	} catch (Exception e) { // 处理异常
		e.printStackTrace();
	}
}
}
  • 数据输入输出流

  • 数据输入输出流(DataInputStream类与DataOutputStream类)
  • 当读取一个数据时,不必再关心这个数值应当是什么字节
  • DataInputStream类只提供了一个readUTF()方法返回字符串。这是因为要在一个连续的字节流读取一个字符串,如果没有特殊的标记作为一个字符串的结尾,并且事先也不知道这个字符串的长度,也就无法知道读取到什么位置才是这个字符串的结束
  • DataOutputStream类中只有writeUTF()方法向目标设备中写入字符串的长度,所以我们也只能准确地读回写入字符串
package com.liu.java;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class fileTest04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			// 创建FileOutputStream对象
			FileOutputStream fs = new FileOutputStream("word.txt");
			// 创建DataOutputStream对象
			DataOutputStream ds = new DataOutputStream(fs);
			ds.writeUTF("使用writeUFT()方法写入数据;"); // 写入磁盘文件数据
			ds.writeChars("使用writeChars()方法写入数据;");
			ds.writeBytes("使用writeBytes()方法写入数据.");
			ds.close(); // 将流关闭
			// 创建FileInputStream对象
			FileInputStream fis = new FileInputStream("word.txt");
			// 创建DataInputStream对象
			DataInputStream dis = new DataInputStream(fis);
			System.out.print(dis.readUTF()); // 将文件数据输出
		} catch (Exception e) {
			e.printStackTrace(); // 输出异常信息
		}
	}

	}


  • zip压缩输入输出流

1、压缩文件

  • 利用ZipOutputStream类对象,可将文件压缩为“.zip”文件。
  • ZipOutputStream类的构造函数

            ZipOutputStream(OutputStream out);

             ZipOutputStream

类的常用方法如下表所示:

2、解压缩ZIP文件

  • ZipInputStream类可读取ZIP压缩格式的文件,包括对已压缩和未压缩条目的支持(entry
  • ZipInputStream类的构造函数

ZipInputStream(InputStream in)

ZipInputStream类的常用方法如下表所示

package com.liu.java;

import java.io.File;
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class fileTest05 {
	public static void main(String[] temp) {
		ZipInputStream zin; // 创建ZipInputStream对象
		try { // try语句捕获可能发生的异常
			zin = new ZipInputStream(new FileInputStream("project.zip"));
			// 实例化对象,指明要进行解压的文件
			ZipEntry entry = zin.getNextEntry(); // 获取下一个ZipEntry
			while (((entry = zin.getNextEntry()) != null)
					&& !entry.isDirectory()) {
				// 如果entry不为空,并不在同一目录下
				File file = new File("D:\\" + entry.getName()); // 获取文件目录
				System.out.println(file);
				if (!file.exists()) { // 如果该文件不存在
					file.mkdirs();// 创建文件所在文件夹
					file.createNewFile(); // 创建文件
				}
				zin.closeEntry(); // 关闭当前entry
				System.out.println(entry.getName() + "解压成功");
			}
			zin.close(); // 关闭流
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/RONG_YAO/article/details/89421532