io流部分知识点

本文详细介绍了Java中的IO流,包括输入流和输出流的分类,字节流和字符流的区别,以及如何进行文件拷贝。字符输入流创建时可新建或清空文件,write方法按ASCII码写入字符。FileOutputStream支持换行写和续写,而FileInputStream用于读取文件,一次读取一个字节。文件拷贝过程中,利用循环读写实现,但效率较低,可优化为一次读取多个字节提高速度。


存储和解决数据的方案
解释:i:input;o:output;流:像水流一样传输数据

分类

在这里插入图片描述

io流按照流向可以分为输入流和输出流:
输入流:程序到文件
输出流:文件到程序
io流按照操作文件的类型可以分为字节流和字符流:
字节流可以操作所有类型的文件,字符流只能操作纯文本文件
文件:保存数据的地方
纯文本文件:Windows自带的记事本打开能读懂
在这里插入图片描述
创建文件对象相关构造器和相关方法:

new File(String pathname) 根据路径创建一个File对象

new File(File parent,String child) 根据父目录文件+子路径构建

new File(String parent,String child) 根据父目录+子目录构建

字符输入流的用法和细节:

创建对象
细节1:参数是字符串表示的路径或者是File对象都是可以的
细节2:如果文件不存在,会创建一个新的空文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件

写出数据
write方法的参数是整数,但是实际写的本地文件里的参数是整数在ASCII码表里对应的字符

释放资源
每次使用之后都要释放资源

FileOutputStream写数据的3种方式:

在这里插入图片描述

换行写和续写

换行:再次写一个换行符就可以,但是不同操作系统的换行符是不一样的,比如:
Windons:\r\n
Linx:\n:
Max:\r

细节:在Windns操作系统中,java对换行符做了优化,虽然完整的是\r\n,但是`我们写其中一个\r或者\n即可,因为JAVA在底层会补全,但是尽量不要省略写
续写:如果想要续写,打开续写开关即可,开关位置,续写对象的第二个参数,默认是false是关闭续写,只需写为true即可

  • FileOutputSteam的作用:可以把程序中的数据写到本地文件上,是字节流的基本流*

    FileInputStream书写细节
    1.创建字节输入流对象
    如果文件不存在就直接报错

    2.读取数据
    一次读一个字节,读出来的是数据在ASCII上对应的数字
    读到文件末尾了,read方法返回-1

    3.释放资源
    字符输入流循环读取

字节输入流的用法和书写细节

1.创建字节输入流对象

  FileInputStream fis = new FileInputStream(name:" ");

如果文件不存在就直接报错

那么java为什么会这么设计呢?

因为输出流不存在就创建(程序把数据写到文件中),输入流不存在就报错(文件把数据传递给程序)
2.读数据

一次读一个字节,读出来的是数据在ASCII上对应的数字

读到文件末尾了,read方法返回-1

int b1 = fis.read();

System.out.println(b1);

3.释放资源

fis.close();

read()方法是用来读取数据的,如果读不到了就会返回-1

FileInPutStream字节输入流的循环读取

1.创建对象

FileInputStream fis = new FileInputSteam(name:" ");

2.循环读取:

int b;

while((b = fis.read())! = -1){

System.out.println((char)b);

}

3.释放数据

fis.close();

文件拷贝

(选择一个比较小的文件)

1.创建一个对象
FileInputStream fis = new FileInputStream(name:" “);
FileOutputStream(name:” ");

2.拷贝:
int b;
while((b = fis.read())! =-1){
fos.write(b);
}

3.释放数据

规则:先开的后关闭
fos.close();
fis.close();

文件拷贝的弊端是速度比较慢,因为FileInputStream一次只读取一个字节,所以速度比较慢 下面是一次可以读取多个字节的方法:
在这里插入图片描述

FileInputStream fis = new FileInputStream(name:" ");
	byte[] bytes = new byte[2];
	int len = fis.read(bytes);
	Sysatem.out.println(len);//2
	String str = new String(bytes);
	System.out.println(str);
	fis.close();  

下周计划

首先完成这次考核的内容:点菜系统,通过小组内算法比赛感觉自己的算法有很大的欠缺,还需要多多练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值