java中,IO流学习归纳

本文详细介绍了Java中的IO流概念及应用,包括File类的操作、字符流与字节流的使用方法,以及对象流的序列化与反序列化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解实质,记住形式。让理解更加直观,可以画个图。 

一、File类

在整个io包中,File类是唯一与文件本身有关的类,File类的对象用于创建或删除文件等常用操作

构造方法:File(String pathname)

常用方法: 

       boolean createNewFile() throws IOException;
       boolean delete():
       boolean mkdir():
       boolean mkdirs():
       boolean exists():
       boolean isFile():
       boolean isDirectory():
       String[] list():
       File[] listFiles():
       String getName():
       String getPath():
       String getAbsolutePath():

列出指定目录下所有的文件

    public static void fun(File file){//要查询的目录
	           //判断file是目录还是文件
		   if(file.isFile()){
		       System.out.println("该文件所在的绝对路径:"+file.getAbsolutePath());
		   }else{
		           //2.获取该目录下所有子文件和子目录对象
			   File[] childFiles=file.listFiles();
			   if(childFiles!=null){
				   for(File f:childFiles){//a b a.txt
					  fun(f);  //调用方法自己
				   }
			   }
		   }
	}

二、字符流

字符流以字符为单位操作流,多用于文本文件的读写,包含的两个根类都是抽象类,不可实例化,如下:

1.Reader

FileReader是Reader的子类,常用的构造函数:FileReader(File file)、FileReader(String fileName) 

BufferedReader是相应的处理流类,构造方法:BufferedReader(Reader in) 、BufferedReader(Reader in, int size) 

2.Writer

FileWriter是Writer的子类,常用的构造函数:FileWriter(File file)、FileWriter(String fileName) 

BufferedWriter是相应的处理流类,构造方法:BufferedWriter(Writer out)  、BufferedWriter(Writer out, int size)  

 例:复制文本文件

public class Copy1 {
	public static void main(String[] args) {
		File file1 = new File("H:\\javase\\a.txt");
		File file2 = new File("H:\\javase\\b.txt");
		
		FileReader fileReader = null;
		FileWriter fileWriter = null;
		try {
			fileReader = new FileReader(file1);
			fileWriter = new FileWriter(file2);
			
			char[] cs = new char[5];
			int i = fileReader.read(cs);
			while(i != -1) {
				fileWriter.write(cs,0,i);
				i = fileReader.read(cs);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (fileReader!=null && fileWriter!=null) {
				try {
					fileReader.close();
					fileWriter.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

三、字节流

字节流以字节为单位操作流,多用于非文本文件(doc 、jpg、ppt etc.)的读写,包含的两个根类都是抽象类,不可实例化,如下:

1.InputStream

FileInputStream是InputStream的子类,常用的构造函数:FileInputStream(File file)、FileInputStream(String fileName) 

BufferedInputStream是相应的处理流类,构造方法:BufferedInputStream(InputStream in) 、BufferedInputStream(InputStream in, int size) 

2.OutputStream

FileOutputStream是OutputStream的子类,常用的构造函数:FileOutputStream(File file)、FileOutputStream(String fileName) 

BufferedOutputStream是相应的处理流类,构造方法:BufferedOutputStream(OutputStream out) 、BufferedOutputStream(OutputStream out, int size) 

例:复制图片

public class Copy2 {
	public static void main(String[] args) {
		File file1 = new File("H:\\javase\\pic1.jpg");
 		File file2 = new File("H:\\javase\\pic2.jpg");
 		
 		FileInputStream in = null;
 		FileOutputStream out = null;
 		try {
			in = new FileInputStream(file1);
			out = new FileOutputStream(file2);
			
			byte[] bytes = new byte[50];
			int i = in.read(bytes);
			while(i != -1) {
				out.write(bytes, 0, i);
				i = in.read(bytes);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (in!=null && out!=null) {
				try {
					in.close();
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

 

四、对象流

对象输入流ObjectInputStream,继承InputStream,构造方法:ObjectInputStream(InputStream in) 

对象输出流ObjectOutputStream,继承OutputStream,构造方法:ObjectOutputStream(OutputStream out) 

序列化(Serialize):    用ObjectOutputStream类将一个Java对象通过IO流写入到数据源中

 public static void main(String[] args) throws Exception 
    {
        OutputStream os=new FileOutputStream("D://a.txt");
        ObjectOutputStream oos=new ObjectOutputStream(os);

        //注意:该类People 必须实现Serializable接口。
        //     该类中所有要序列化的属性的类型必须也实现Serializable接口

        People p=new People("张三",19);
        oos.writeObject(p); //把一个对象通过ObjectOutputStream写入到数据源

        oos.close();
        os.close();
    }

反序列化(Deserialize):用ObjectInputStream类从数据源中恢复该Java对象。
 

   public static void main(String[] args) throws Exception
    {
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D://a.txt"));
        Object o=ois.readObject(); //获取该文件中的对象
        People p=(People)o; //向下转型
        System.out.println(p.getName()+"=====>"+p.getAge()+"----->");//toString();
        ois.close();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值