Java I/O流 输入输出流

IO流:Input(输入)、Output(输出)、stream(流)
输入流:把文件或者内容 读入到程序中。
输出流:把程序中的数据 写入 到文件中。

输入输出流解决什么问题呢?
输入流:如果没有输入流,所有的内容需要你在程序内置。有了输入流,就可
以把程序外的内容读入到程序里。
输出流:我们程序里的内容都是存在内存里的,程序运行结束后,内存被系统
回收,就导致内容丢失。想要数据持久化,必须把数据放到硬盘上。

Java里的io流有以下分类:
按流向:输入流、输出流
按功能:字节流、字符流
字符流:以字符为单位,处理文本文件。例如: .txt, .java
字节流:以字节为单位,处理各种文件。例如:.avi,.rmvb,
.mp4,.mp3,.jpg,.txt
按角色分:节点流、处理流

IO流有4个抽象类

字节输入流 字节输出流 字符输入流 字符输出流
InputStream OutputStream Reader Writer
FileInputStream FileOutputStream FileReader FileWriter

使用字节流读取文件内容:
第一步:
创建字节输入流对象。(建立输入流管道)
第二步:
读取数据(read())。
第三步:
关闭输入流。写在finally里,判断如果输入流不为null,要close()

字节输出流把数据写入文件
第一步:
创建字节输出流对象。(建立输出流管道)
第二步:
写入数据(write())
第三部:
关闭输出流。写在finally里,判断如果输入流不为null,要close()

在这里插入图片描述

举一个应用的小例子:

package com.lanou3g.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {

public static void copyFile(String src, String desc) {
	FileInputStream fis = null;
	FileOutputStream fos = null;
	try {
		fis = new FileInputStream(src);
		fos = new FileOutputStream(desc);
		
		byte[] b = new byte[1024];
		int len = 0;
		while((len = fis.read(b)) != -1) {
			fos.write(b);
		}

	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}finally {
		if(fis != null) {
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if(fos != null) {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

public static void main(String[] args) {
	long start = System.currentTimeMillis();
	String src = "C:\\Users\\neal\\Desktop\\a.mp4";
	String desc = "C:\\Users\\neal\\Desktop\\e.mp4";
	copyFile(src,desc);
	long end = System.currentTimeMillis();
	System.out.println(end-start);

}
}

File这个类用于描述一个文件或者目录(文件夹)

public class LessonFile {
public static long total = 0;

public static void file() {
	//File这个类用于描述一个文件或者目录(文件夹)
	
			//File f = new File("C:\\Users\\neal\\Desktop\\hello.txt");
			File f = new File("src\\b.txt");
			System.out.println(f);
			String name = f.getName();
			System.out.println(name);
			long length = f.length();
			System.out.println(length);
			String parent = f.getParent();
			System.out.println(parent);
			
			System.out.println(f.getPath());
			System.out.println(f.getAbsolutePath());
			
			//判断
			boolean b1 = f.exists();
			System.out.println(b1);
			if(b1 == false) {
				try {
					f.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}else {
				f.delete();
			}
}

public static void directory() {
	/*File f = new File("C:\\Users\\neal\\Desktop\\bcd");
	System.out.println(f.getName());
	System.out.println(f.getPath());
	System.out.println(f.getAbsolutePath());
	System.out.println(f.length());
	//目录是获得不了大小的。永远返回0。
	//如果想计算大小,分别对每个文件大小求和
	
	//判断
	System.out.println(f.exists());
	System.out.println(f.isFile());
	System.out.println(f.isDirectory());
	//创建文件夹(路径上所有的文件夹)
	//f.mkdirs();
	//删除文件夹//一个文件夹里有内容的话,不能删除,需要先删除文件夹里的文件(或文件夹)
	//再删除文件夹  只能循环先删里面的再删外面的。
	f.delete();
	*/
	//查看文件夹里的文件列表。
	File f = new File("C:\\Users\\neal\\Desktop\\abc");
	String[] files = f.list();
	for (String string : files) {
		System.out.println(string);
	}
	
}

//遍历某文件夹下面所有的文件
public static void listDirectory(File f) {
	if(f.isDirectory()) {
		File[] files = f.listFiles();
		for (File file : files) {
			listDirectory(file);
		}
	}else {
		System.out.println(f);
	}
}

//计算文件夹的大小
//	public static void calculateDirectorySize(File f) {
//		if(f.isDirectory()) {
//			File[] files = f.listFiles();
//			for (File file : files) {
//				calculateDirectorySize(file);
//			}
//		}else {
//			long size = f.length();
//			total += size;
//			System.out.println(f);
//		}
//	}


//删除指定的文件夹
public static void deleteDirectory(File f) {
	if(f.isDirectory()) {
		File[] files = f.listFiles();
		for (File file : files) {
			deleteDirectory(file);
		}
		f.delete();
	}else {
		System.out.println(f);
		f.delete();
	}
}

public static void main(String[] args) {
	//directory();
//		File f = new File("C:\\Users\\neal\\Desktop\\abc");
//		deleteDirectory(f);
//		
//		System.out.println(total);
		//文件重命名
	//原文件要存在,第二目标文件不存在
	File f1 = new File("C:\\Users\\neal\\Desktop\\3.java");
	File f2 = new File("C:\\Users\\neal\\Desktop\\bcd\\3.java");
	f1.renameTo(f2);
}

猜你喜欢

转载自blog.csdn.net/weixin_43791238/article/details/89222667