java核心库——IO(一)

学习IO的时候,发现IO的方法很多,各种类也很复杂,这里做个小整理吧,一点点来理解IO

java的集合框架存在与java.util包中
IO框架: 类和接口存在于java.io
File 类
File类介绍和路径分隔符:
File类是IO包中唯一表示 磁盘文件和磁盘目录 的对象的路径。
该类包含了创建、删除、重命名文件、判断文件读写权限以及文件是否存在、查询等功能方法。
只能设置和获取文件本身的信息(就是文件的属性),不能设置和获取文件的内容。

Java做开发:一次编写,多处运行(强调的是Java的跨平台型)。
-----------------------------------------------------------------------------------
大小写问题:
Unix:严格区分大小写。
Windows:默认情况下是 不区分大小写的。
路径分隔符,属性分隔符:
Unix:使用"/"来 分割目录路径 ;使用":"来 分割属性。
Windows:使用"\"来分割目录路径。但是在Java中一个"\"表示转义,在Windows平台的Java代码中表示一个路径,就得使用两个\\,但是Windows支持/;使用";"来分割属性。
因为不确定运行的系统平台,所以不确定如何编写分隔符。因此在File类中提供了两类常量,分别来表示路径分割符和属性分割符。
获取属性分割符:File.pathSeparator(返回一个String)或File.pathSeparatorChar(返回一个Char)
获取路径分割符:File.Separator(返回一个String)或File.SeparatorChar(返回一个Char)
例:
String path1 = "c:\\will\\123.txt";
String path2 = "c:/will/123.txt"; //推荐
String path3 = "c:" + File.Separator + "will" + File.Separator + "123.txt";

File类中方法-文件操作
boolean isFile():是否是文件
boolean createNewFile():创建新的文件
static File createTempFile(String prefix , String suffix):创建临时文件
boolean delete():删除文件
void deleteOnExit():在JVM停止时删除文件
boolean exists():判断文件是否存在
boolean renameTo(File dest):重新修改名称
操作File路径和名称:
File getAbsoluteFile():获取绝对路径
String getAbsolutePath():获取绝对路径
String getPath():获取文件路径
String getName():获取文件名称
File getParentFile():获取上级目录文件
String getParent():获取上级目录路径
---------------------------------------------------------------------------------------------------

private static void listAllFile(File f) {
		System.out.println(f);
		
		File[] fs =f.listFiles();
		//打印一级文件
		for(File file : fs){
			System.out.println(file);
 		//如果是文件夹,则使用递归
			if(file.isDirectory()){
				listAllFile(file);
			}else {
				//如果是子文件,则打印文件(递归的出口)
				System.out.println(file);
			}
		}
	}


【IO概述】
IO(Input/Output):输入和输出。
IO设备:和电脑通信的设备。
输入设备:麦克风、扫描器、键盘、鼠标等。
输出设备:显示器、打印机、投影仪、耳机、音响等。
为什么程序需要IO呢?
存储游戏数据(XXX-888分)、查看游戏英雄榜、上传和下载操作

IO操作是一个相对的过程,一般我们在程序的角度来考虑。
程序需要数据:把数据流入到程序中:输入。
程序需要保存数据,把数据传递给别人:输出。

输入模式:文件/网络/压缩包/其他数据源→数据流→Java程序
输出模式:Java程序→数据流→文件/网络/压缩包/其他数据源

----------------------------------------------------------------------------
IO流的分类:
①根据流向划分:输入流和输出流
②根据数据单位划分:字节流和字符流
③根据功能划分:节点流和包装流
四大基流: 字节输出流(OutputStream)、字节输入流(InputStream)、字符输出流(Write)、字符输入流(Reader);
四大基流都是抽象类,其他流都是继承于这四大基流的;
所以不能创建四大基流的对象,只能创建其 子类对象
无论是什么流,都有 close方法,用来关闭资源 (如果操作文件,就得开通一个流对象关联我们的磁盘文件,如果不关闭资源,那么磁盘的文件一直被程序所引用着,不能删除,也不能更改。)


操作IO流的模板:
①创建源或者目标对象 挖井 )。
例:输入操作→把文件中的数据流向到程序中,此时文件是源,程序是目标。
例:输出操作→把程序中的数据流向到文件中,此时文件是目标,程序是源。
②创建IO流对象 水管 )。
例:输入操作→创建输入流对象。
例:输出操作→创建输出流对象。
③具体的IO操作。
例:输入操作→输入流对象的read方法。
例:输出操作→输出流对象的write方法。
④关闭资源 勿忘 )。
例:输入操作→输入流对象.close();
例:输出操作→输入流对象.close();
操作IO流的六字真言:
读进来(进来强调了是输入,读说明是read方法)
写出去(出去强调了是输出,写说明是write方法)

【文件流概述】
文件流:程序和文件打交道(此处的文件指的是纯文本文件,如:txt,不要使用word、excel)。
FileInputStream:文件的字节输入流
FileOnputStream:文件的字节输出流
FileReader:文件的字符输入流
FileWrite:文件的字符节输出流

-------------------------------------------------------------------
【文件字节输出流】
1.创建目标对象(表示把数据保存到哪一个文件)
例:
File targe = new File("file/stream.txt");
2.创建文件字节输出流对象(水管)
例:
OutputStream out = new FileOutputStream(target, ture); //true表示需要追加文件内容
3.具体的输出操作(往外写操作)
void write(int b):把一个字节写出到文件中
void write(byte[ ] b):把数组b中所有的字节都写出到文件中去
void write(byte[ ] b, int off, int len):把数组b中的从off索引开始的len个字节写出到文件中去(推荐使用)
例:
out.write(65); //写出A
out.write("ABCDE".getBytes()); //getBytes()方法可以将字符串转成Byte数组
out.write("WillLucyLily".getBytes(), 5, "WillLucyLily".length()); //length()方法可以获取字符串的长度
4.关闭资源对象
例:
out.close();

【文件字节输入流】
1.创建源(挖井)
例:
File f = new File("file/stream.txt");
2.创建文件字节输入流对象,并接在源上
例:
InputStream in = new FileInputStream(f);
3.具体的读取操作
int read():读取一个字节,返回读取的字节;如果读取到最后没有数据的时候,返回-1;
int read(byte[ ] b):读取多个字节,并存储到数组b中,从数组b的索引为0的位置开始存,返回读取了几个字节;(推荐使用)
int read(byte[ ] b, int off, int len):读取多个字节,并存储到数组b中,从数组b的索引位置开始存储;
例:
int data = in.read(); //获取stream.txt文件中的第一个字节A→65
byte[ ] buffer = new byte[5]; //此时buffer最多只能存储5个字节
System.out.println(Arrays.toString(buffer)); //将数组buffer打印出来
String str = new String(buffer, 0, 7); //将buffer数组从索引为0的位置,取7个元素,存入到str数组中。
4.关闭资源对象
例:
in.close();


文件的拷贝操作
文件的拷贝操作实际上就是输入操作和输出操作的结合
public class StreamCopyDemo {
	public static void main(String[] args) throws  IOException{
		//1.创建源
		File srcfile = new File("file/stream.txt");
		File desfile = new File("target/tr.txt");
		//2.创建流管道
		InputStream fis = new FileInputStream(srcfile);
		OutputStream fos = new FileOutputStream(desfile);
		
		//3.读取操作
		int len = -1 ;//表示已经读取了多少个数据,-1表示文件已经读取到了最后
		byte[] buffer = new byte[1024];//创建容量为1024的缓冲区(存储已经读取的数据)
		while( (len = fis.read(buffer))!=-1){
			fos.write(buffer, 0, len);//将缓冲区中的数据通过输出流写到目标文件
		}
		//4.关闭资源
		fis.close();
		fos.close();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值