Java_流
2021-01-23 14:14
标签:soc pointer 节点 sage 文件 exception 字节 private 标记 写入数据的原理: 字节输出流写入步骤: 写入: public void write(int a): 记事本打开文件时查询编码表 字节 -> 字符 public void write(byte[] b): public void write(byte [] b,int off, int len): 追加/续写: 换行: java程序 -> JVM -> OS -> 读取方法 ->读取文件 多字节读取 层次: Reader FileReader FileInputStream 读取字节 -> FileReader转换成字符 InputStream:文件字符输入流 层次 FileWriter: 文件字符输出流 作用: 将内存中的内容输入到磁盘中 flush 与 close 的区别: FileWriter(String filename , boolean append); java.lang.Object 是一个持久的属性集。Properties可以保存在流或从流中加载 store() : 把集合中的临时数据,持久化写入到硬盘中存储 使用步骤 load(): 把硬盘中保存的键值对,读取到内存中 步骤 注意: 是双列结合,Key和Value默认都是字符串 BufferedOutputStream :字节缓冲输出流 构造方法: 参数: 作用: 步骤 BufferedInputStream : 字节缓冲输入流 构造方法: 参数 使用步骤 字符缓冲输出流 构造方法: 参数 方法 步骤 字符缓冲输入流 构造函数 参数 方法 分析: ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; ArrayListTest.java FileOutputStream 会创建文件,但是依然需要抛出 FileNotFoundException 当处理的数据为int等类型时,需要专门的数据输入输出流来处理。 InputStream 和OutStream 是字节流 BufferReader 和 BufferWriter类 能提高读写处理速度。 字节流放到字符流的处理器内,需要用到转换器。 RandomAccessFile 允许文件同时完成读和写操作,它直接继承Object类 提供了支持随机文件操作的方法: 构造函数: mode 的取值: Java 提供了Serializable的接口,只要实现了这一接口就可以使用ObjectInputStream和ObjectOutputStream 进行对象的输入输出。 StandardCopyOption 属性: Java_流 标签:soc pointer 节点 sage 文件 exception 字节 private 标记 原文地址:https://www.cnblogs.com/KawYang/p/12882747.html
流(黑马)
字节输出流 (OutputStream)
java.io.OutputStream
最顶层的抽象类,定义了所有字节流的所有方法。
定义了子类共性的方法。 close(),flush(),write(**)*3
文件字节输出流(FileOutputStream)
继承了 OutputStream
将内容写入到硬盘中
由内存到硬盘: java程序 --> JVM --> OS --> 调用写数据的方法(OS) --> 写入文件1. 创建一个对象(传递写入数据的路径)
2. 调用对象中的write 方法,写入到文件中
3. 释放资源 (提高程序的效率)
// 1. 创建一个对象(传递写入数据的路径) (相对路径)
FileOutputStream fos = new FileOutputStream("09\\a.txt");
//2. 调用对象中的write 方法,写入到文件中
fos.write(97); //十进制 -> 二进制 (1100001)
//3. 释放资源 (提高程序的效率)
fos.close();
0 - 127 : ASCII 表
其他:系统默认编码表(中文系统GBK表)
数据的追加写和换行写
FileOutputStream(String name ,boolean append)
FileOutputStream(File file ,boolean append)
windows : \r\n
linux : \n
mac:: \r
字节输入流(InputStream)
也是抽象类,定义了输入流子类共性的方法。
read() * 2 , close()
文件字节输入流 (FileInputStream)
FileInputStream fin = new FileInputStream("src/liu/a.txt");
int x;
//读取一个字节
x = fin.read();
System.out.println(x);
//文件结束 返回 -1
x = fin.read();
System.out.println(x);
/**
* 1. fin.read() : 读取一个字符
* 2. x = fin.read() 赋值
* 3. 判断 x 是否等于 -1
*/
while((x = fin.read()) != -1){
System.out.println((char)x);
}
fin.close();
/**
* 多字节读取
* byte 有时恰好汉字没有乱码
*/
byte [] b = new byte[4];
fin = new FileInputStream("src/liu/b.txt");
while ((x = fin.read(b))!= -1){
System.out.println(new String(b,0,x));
}
练习:文件复制
package liu;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author LiYang
* @Project Name: bilibili
* @Package Name: liu
* Created by MacBook Air on 2020/02/25.
* Copyright ? 2020 LiYang. All rights reserved.
* 字节流练习
*/
public class CopyFile {
public static void main(String[] args) {
try{
FileInputStream fin = new FileInputStream("src/liu/2.jpeg");
FileOutputStream fout = new FileOutputStream("src/1.jpeg",true);
byte [] b = new byte[1024];
while (fin.read(b) != -1){
fout.write(b);
}
fout.close();
fin.close();
} catch (IOException e){
System.out.println(e.getMessage());
}
}
}
字符流
java.io.Reader
解决中文读取可能乱码的问题
1个中文:
GBK: 占2个字节
UTF-8 :占3个字节
字符输入流(Reader)
抽象类
共性成员的方法: close(),read()
字符输出流 (Writer)
java.io.Writer;
flush ():刷新
所有字符输出流的顶层类,是一个抽象类
java.io.FileWriter extends OutputStreamWriter extends Writer
续写和换行写
FileWriter(File file , boolean append);属性集
是唯一一个与IO流相结合的集合
缓冲
字节缓冲流
字符缓冲流
练习:文本排序
转换流
OutputStreamWriter
InputStreamReader
练习:文件转码
对象流
对象序列化
对象反序列化
transient 关键字
/**
* 序列化标记型接口
*/
class Point implements Serializable{
private int x;
private static int y;
transient int z;
public Point(int x, int y,int z) {
this.x = x;
Point.y = y;
this.z = z;
}
public void print(){
System.out.println("(" +x+","+y+","+z+")");
}
}
InvalidClassException
找不到:会抛出 InvalidClassException 异常
练习:序列化集合
ArrayListTest1.java
可以把多个对象储存到一个集合中
对集合进行序列化和反序列化
打印流
System.out.println("我是控制台输出!");
//PrintStream ps = new PrintStream("src/liu/c.txt");
PrintStream ps = new PrintStream(new FileOutputStream("src/liu/d.txt"));
//修改打印的位置
System.setOut(ps);
System.out.println("文件打印!");
流(mooc)
数据流
数据流是指应用程序与对象进行数据交换时的数据传输过程。
字节流是按照字节读/写二进制数据。
InputStream和OutputStream类是处理以8字节为基本单位的字节流,读写以字节为单位进行。
Object:InputStream、OutputStream(字节流);File(文件);Reader、Writer(字符流);RandomAccessFile(随机处理文件)
节点流
节点流是直接与特定数据源相连的流,提供了访问该数据源的基本操作。
过滤器流
1. 为了提高数据的处理速度
2. 能对如:int、double之类的数据直接进行操作
会联合使用被称为过滤器(Filter)流,提高留的处理效率。
过滤器流不能够单独使用,必须与相应的节点流进行一起使用。
带缓冲的过滤器流
数据输入输出流
DateInputStream 类和DateOutputStream类 能够直接读写Java基本类型的数据和Unicode编码格式的字符串。文件流
//目录
File file1 = new File("/user/test/");
//file2、3 指向同一个文件
File file2 - new File("/user/test/","a.txt");
File file3 = new File(file1,"a.txt");
try{
File pPath = new File(System.getProperty("user.dir")+"/流/src/");
File in = new File(pPath ,"FileInput.txt");
File out = new File(pPath,"FileOut.txt");
System.out.println(in);
FileInputStream fin = new FileInputStream(in);
FileOutputStream fout = new FileOutputStream(out);
int textNu;
while ((textNu = fin.read())!= -1) {
fout.write(textNu);
System.out.println(textNu);
}
fin.close();
fout.close();
} catch (FileNotFoundException e){
System.out.println("Error:"+e.getMessage());
}
字符流
Reader和Writer是字符流
InputStreamReader 是将输入的字节流转换成字符输入流。
OutStreamReader 是将输出的字节流转换成字符流输出。随机读写
并且实现了接口DataInput和DataOutput类
类似存储在文件系统的一个大型的byte数组
存在指向该隐含数组的光标或索引,成为文件指针。
RandomAccessFile(File file,String mode)
RandomAccessFile(String name,String mode)
对象I/O
拷贝
Path path1 = Paths.get("/home/project/1.txt");
Path path2 = Paths.get("/home/project/2.txt");
Files.copy(path1,path2, StandardCopyOption.REPLACE_EXISTING);
options 中指定了REPLACE_EXISTING属性。当该命令复制目录时,如果目录中已经有了文件,目录中的文件将不会被复制。CopyOption 参数支持以下 StandardCopyOption 和 LinkOption 枚举:
移动和重命名
Files.move(Path,Path,StandardCopyOption);
上一篇:java基础总结(二)【对象】
下一篇:Python之测试程序是否有误