Java I/O流(一)
2018-11-24 本文已影响0人
RicherYY
学习了Java中的i/o流来读取文件
1.File类的操作文件和目录属性
2.字符流字节流讲解
3.使用字节流读写文件
4.使用字符流读写文件
5.字节流读写二进制文件
6.使用对象流,对象的序列化
详解
1.对文件进行操作。
大概有的东西是文件的创建和判断文件存在不存在
了解就行,不是重点。
2.字节流和字符流的讲解
--- | 字节流 | 字符流 |
---|---|---|
输出流 | OutputStream 字节输出流 | Writer 字符输出流 |
输入流 | InputStream 字节输入流 | Reader 字符输入流 |
以上算是、四大基流都是抽象类,其他流都是继承四大流的。
- 我们不能创建四大基流的对象只能创建其子类对象
- 所有流都有关闭方法
操作I/O流的模板
1.创建源或者目标对象(挖井)
输入操作:把文件中的数据流向程序中,此时文件是源,程序是目标对象
输出操作:把程序中的数据流向文件中,此时程序是源,文件是目标对象
2.创建IO流对象(水管)
输入操作:创建输入流对象
输出操作:创建输出流对象
3.具体的I/O操作
输入操作:使用输入流对象的read()方法
输出操作:使用输出流对象的write()方法
4.关闭资源(勿忘)
输入操作:关闭流close()方法
输出操作:关闭流close()方法
I/O流的六字真言
读进来写出去
读进来,强调输入利用输入流的read()方法
写出去,强调输出利用输出流的write()方法
文件流
程序和文件之间的联系就是文件流
FileInputSteam:文件字节输入流
FileOutputSteam:文件字节输出流
FileReader:文件字符输入流
FileWriter:文件字符输出流
3.字节流
字节流暂时不要用中文
输出流
FileOutputSteam 示例:
public class FileSteamDome {
public static void main(String[] args) throws IOException{
//1.创建源或目标文件
File f = new File("D:/myDoc/123.txt");
//2.创建IO流对象(建立水管)
FileOutputStream fos = new FileOutputStream(f,true);
//3.实现IO操作
//FileOutputStream 方法
/*
* void write(byte[] b)
* 将 b.length个字节从指定的字节数组写入此文件输出流。
*
* void write(byte[] b, int off, int len)
* 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。
*
*
*/
//传一个字节的情况
fos.write(65);
//传多个字节的情况
String str = "好好学习天天向上";
//将字符串赋值给一个字节数组,因为只有字节数组才能传输
byte[] words = str.getBytes();
//写到文件中
fos.write(words,0,words.length);
//4.关闭流
fos.close();
}
}
Ps:FileOutputStream构造方法中有一个布尔值用来判断是否追加文字。
输入结果
输出流结果.PNG
输入流示例
public class FileInputSteamDome {
public static void main(String[] args) throws IOException {
//1.创建源
File f = new File("D:/myDoc/123.txt");
//2.创建IO流对象
FileInputStream fis = new FileInputStream(f);
//3.实现IO操作
/*
* int read()
* 从该输入流读取一个字节的数据。
* int read(byte[] b)
* 从该输入流读取最多 b.length个字节的数据为字节数组。
* int read(byte[] b, int off, int len)
* 从该输入流读取最多 len字节的数据为字节数组。
*
*/
//读一个字节的情况
// int data = fis.read();
// System.out.println(data);
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());//读不到东西就返回-1
//读多个字节的情况
//需要一个字符数组来接收数据
byte[] buffer = new byte[1024];
//需要有一个int类型变量来接收读取到的值
int len ;
/*
* 1.因为不知道要循环多少次所以使用while循环
* 2.现阶段所有数据都存储在buffer字节数组中要读取出来
* 3.要利用String的构造方法String(byte[] bytes, int offset, int length)
* 从第0个开始一直读到len的位置
*/
while((len = fis.read(buffer))!= -1) {
String str = new String(buffer, 0, len);
System.out.println(str);
}
//4.关闭流
fis.close();
}
}
打印结果
ABCDEFG
小结:
- 利用字符流的时候要记得是流的是字节所以需要byte数组来接收
- 使用I/O流进行传输数据的时候不要忘了四个步骤:
1.创建源对象(挖井)
2.创建IO对象(做管道)
3.具体操作IO实现数据读写
4.关闭流