JAVA I/O

1.File类

file类是java.io包下作为文件和目录的类。主要是在java中要对文件进行操作时可以使用该类进行操作。可以对文件和目录进行新建、删除、和重命名等。但不能对文件进行读写操作。操作文件内容需要使用I/O流。

1.1 常用方法

#方法描述类型
1exists()判断file对象指定文件是否存在boolean
2isDirectory()判断file对象指定文件是否为目录boolean
3isFile()判断file对象指定文件是否为标准文件boolean
4getName()获取文件的名字String
5length()得到file对象指定文件的长度(在系统中,文件夹、目录的大小为0,不占用空间)long
6mkdir()根据file对象的名字(路径)创建一个文件夹,如果是相对路径则新建的目录在当前目录下boolean
7mkdirs()可以用该方法一次性创建有多级目录的文件名boolean
8createNewFile()创建标准文件的方法boolean
9getCanonicalPath()返回此抽象路径的规范字符串String
10list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录String[ ]
11list(FilenameFilter filter)返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录Stirng[ ]
12listFiles()返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。File[ ]
13listFiles(FileFilter filter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录file[ ]
14listFile(FilenameFilter filter)返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录file[ ]

1.2 Demo

public class FileTest {

	public static void main(String[] args) throws IOException {
		File file = new File(".");
		//打印输出文件名
		System.out.println(file.getName());
		//获取文件路径
		System.out.println(file.getCanonicalPath());
		//在当前目录下创建文件夹newfile
		File dir = new File(file,"newfiles");
		//如果文件夹不存在则创建
		if(!dir.exists()) { dir.mkdir();}
		//在newfile目录下创建test.txt
		File test = new File(dir,"test1.txt");
		//如果test.txt不存在则创建
		if(!test.exists()) { test.createNewFile();}
		
		//获取dir文件夹下的所有文件
		File[ ] files = dir.listFiles();
		//显示dir文件夹下所有文件的名字
		System.out.println("------------------");
		System.out.println(Arrays.toString(files));
		//显示test的绝对路径
		System.out.println(test.getCanonicalPath());
		//文件是否隐藏
		System.out.println(dir.isHidden());
		
		File test_j = new File(dir,"test2.java");
		if(!test_j.exists()) test_j.createNewFile();
		System.out.println("------------------");
		System.out.println(test_j.getCanonicalPath());
		
		File[] files2 = dir.listFiles(new myFilter());
		//显示符合条件的文件名字
		System.out.println("------------------");
		for(File f:files2) {
			System.out.println(f.getName());
		}
	}
}
class myFilter implements FileFilter{
	@Override
	public boolean accept(File pathname) {
		//以 .java 为后缀的文件名
		return pathname.getName().endsWith(".java") && pathname.isFile();
	}
}

结果:
运行结果
在这里插入图片描述

2.RandomAccessFile类

该类的实例支持读取和写入随机访问文件。 随机访问文件的行为类似于存储在文件系统中的大量字节。 有一种游标,或索引到隐含的数组,称为文件指针 ; 输入操作读取从文件指针开始的字节,并使文件指针超过读取的字节。 如果在读/写模式下创建随机访问文件,则输出操作也可用; 输出操作从文件指针开始写入字节,并将文件指针提前到写入的字节。 写入隐式数组的当前端的输出操作会导致扩展数组。 文件指针可以通过读取getFilePointer方法和由设置seek方法。

2.1 构造方法

RandomAccessFile类有两个构造器,两个构造器基本相同,知识指定文件的形式不同。File参数指定文件本身String参数指定文件名,mode参数则指定访问模式。
具体如下:

构造方法描述
RandomAccessFile(File file,String mode)创建一个随机访问文件流从File参数指定的文件中读取,
并可选地写入文件
RandomAccessFile(String name,String mode)创建随机访问文件流,以从中指定名称的文件读取,
并可选择写入文件
#mode描述
1“r”只读的形式打开文件
2“rw”读写的形式打开文件,如果文件尚不存在,则尝试创建该文件
3“rws”读写的形式打开文件,相对于"rw"模式,
还要求对文件内容的每个更新都同步写入到底层存储设备
4“rwd”读写的形式打开文件,相对于"rw"模式,
还要求对文件内容的每个更新都同步写入磁盘

2.2 常用方法

#方法名描述类型
1getFilePointer()返回文件记录指针的当前位置long
2seek(long pos)将文件记录指针指定到pos位置void
3read()从输入流中读取单个字节int
4read(byte[ ] b)从输入流中最多读取b.length个字节,
并将其存储在字节数组b中
int
5read(byte[ ] ,int off,int len)从输入流中读取len个字节存储到
数组b中,从off位置开始读取
int
6write(int c)将指定的字节或字符输出到输出流中void
7write(byte[ ]/char[ ] buf)jaing1字节数组或者字符数组输出到指定的输出流中void

2.3 Demo

public class RandomAccessFileTest {
	public static void read(){
		try {
			RandomAccessFile rf = new RandomAccessFile("newfiles\\test1.txt", "rw");
			//输出指针默认位置
			System.out.println("指针位置:"+rf.getFilePointer());
			rf.write('A');
			//写入GBK编码的字符
			String s = "你好!";
			byte[] gb = s.getBytes("gbk");
			rf.write(gb);
			rf.write('B');
			//输出指针位置
			System.out.println("指针位置:"+rf.getFilePointer());
			//移动指针到头
			rf.seek(0);
			System.out.println("指针位置:"+rf.getFilePointer());
			//一次性读取内容到 read_rf,尽可能填满
			byte[] read_rf =new byte[(int) rf.length()];
			rf.read(read_rf);
			System.out.println(Arrays.toString(read_rf));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		read();
	}
}

输出:
在这里插入图片描述
在这里插入图片描述

3JAVA I/O流

IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。
IO流的本质是数据传输,并且流是单向的。

IO分阻塞型IO和非阻塞型IO(NIO)

阻塞型IO在读取数据时,如果数据未到达,会一直阻塞到读取到数据为止,所以称为阻塞型IO,在高并发的环境下性能不佳。

NIO不是使用 “流” 来作为数据的传输方式,而是使用通道,通道的数据传输是双向的,且NIO的数据写入和读取都是异步的,不会阻塞线程,所以称为非阻塞型IO,在高并发的环境下性能很好。

流类结构图

在这里插入图片描述

流的分类

按照不同的分类方式,可以将流分为不同的类型

  1. 输入流和输出流
    . 输入流:只能从文件读取数据
    . 输出流:只能向文件写入数据
  2. 字节流和字符流
    . 字节流:操作的数据单元为8位的字节
    . 字符流:操作的数据单元为16位的字符
  3. 节点流和包装流
    . 向特定的I/O设备(如磁盘,网络)读写数据的流
    . 用于对一个已经勋在的流进行封装或连接,通过封装后的流来实现数据的读写功能
    在这里插入图片描述
    ————————————————————————
    这位博主讲得挺详细 》》点点点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值