Java I/O流常用类小结

简介:
File类
  File类是 IO 包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操纵文件
  File f = new File("d:/test/1.txt");
   常用方法见 API
  delete 方法删除由File对象的路径所表示 对磁盘文件或目录。如果删除的对象是目录,该目录中的内容必须为空。
   节点流
  我们将IO流类分为两个大类,节点流类和过滤流类(也叫处理流类)。
  1. 程序用于直接操作目标设备所对应的类叫节点流类
  2. 程序也可以通过一个间接流类去调用结点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是过滤流类(也叫处理流类)
  InputStream 与 OutputStream (抽象类[字节流])
  程序可以从中连续 读取字节 的对象叫输入流,用InputStream类完成
int read() // 返回 -1 表示遇到流的末尾,结束
int read(byte[] b) //读入b.length个直接放入到b中并返回实际读入的字节数
int read(byte[] b,int off,int len)
void close() //关闭,通知系统释放与这个流相关的资源
  程序能向其中连续 写入字节 的对象叫输出流,用OutputStream类完成
void write(int b) //将一个直接写到输入流
void write(byte[] b) //将整个直接数组写到输出流中
void write(byte[] b,int off,int len) //
void flush() //彻底完成输出并清空缓冲区
void close() //关闭输出流
  这里的输入输出是针对程序而言的,而非文件。
  输入: 程序读取      输出:程序写出
  将A文件的内容写入文件B中:
  我们应该创建一个输入类来完成对A文件的操作,再创建一个输出类来完成对B文件的操作。
  FileInputStream 与 FileOutputStream
  这两个源节点用来操作磁盘文件,在创建一个FileInputStream对象时通过构造函数指定文件的路径和名字,当然这个文件应当是存在的和可读的。在创建一个FileOutputStream对象时指定文件如果存在将要被覆盖。
  只能用来读取字节或字节数组!!!因此字符串需要使用getBytes()方法转为字节数组。
  注:unicode是双字节的,而ASCII是单字节的。 java中的字符默认使用unicode编码!
  编程实现利用FileOutputStream类向文件写入一串字符,并用FileInputStream读出:
public class FileStreamDemo {
public static void main(String[] args) {
File f = new File("Hello.txt");
//输出到文件中
try {
FileOutputStream out = new FileOutputStream(f);
byte buf[] = "hello,well".getBytes();//转成字节输出
out.write(buf);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//从文件中读出显示到屏幕上
try {
FileInputStream in = new FileInputStream(f);
byte[] buff = new byte[1024];
int len = in.read(buff);
System.out.println(new String(buff,0,len));
} catch (Exception e) {
e.printStackTrace();
}
}
}
为什么要 close ?
  Java垃圾回收器只能管理程序中的类的实例对象,没法去管理系统产生的资源,所以程序要调用 close 方法,去通知系统去释放其自身产生的资源。
  这两个类都只提供了对字节或字节数组进行读出的方法。对于字符串的读写,我们还需要进行额外的转换。
   Reader和Writer
  1. 抽象类,用于直接读取字符串文本
  2. Java为字符文本(直接读取字符串)的输入输出专门提供的一套单独的类,其在处理字符串时简化了我们的编程。
  对上面的程序进行如下的修改:—— 使用FileWriter 和 FileReader类来实现直接对字符串的读取:
public class FileStreamDemo2 {
public static void main(String[] args) {
File f = new File("Hello.txt");
try {
FileWriter out = new FileWriter(f);
out.write("hello world,hahaha");
out.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
FileReader in = new FileReader(f);
char[] buf = new char[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
} catch (Exception e) {
e.printStackTrace();
}
}
}
  FileReader的真正优势要结合包装流类才能体现出来!!
  PipedInputStream 与 PipedOutputStream
  一个PipeInputStream对象必须和一个PipedOutputStream对象进行连接而产生一个通信管道。
  这两个类主要来完成线程之间的通信。 --- p 266
  一个线程的PipedInputStream对象能够从另一个线程的PipedOutputStream对象中读取数据。
  void connect(PipedOutputStream src)使此管道输入流连接到管道输出流 src。
  JDK还提供了PipedWriter和PipedReader这两个类来用于字符串文本的管道通信。
  使用管道流,可以实现各个程序模块之间的松耦合通信。
  ByteArrayInputStream 与 ByteArrayOutputStream
  1. 使用字节数组作为数据源
  2. 作用:使用IO流的方式来完成对字节数组内容的读写
   IO程序代码的复用
  由于没有编码为 -1 的字符,所以OS使用 -1 作为硬盘上的每个文件的结尾标记
   文本文件与二进制文件:
  1. 如果一个文件专用于存储文本字符的数据,没有包含字符之外的其他数据,我们称之为文本文件
  2. 除此之外的文件就是二进制文件
  为了支持标准输入输出设备,Java定义了两个特殊的流对象:System.in 和 System.out
  System.in 对应键盘,是InPutStream类型的,从键盘读取数据
  System.out 对应屏幕,是PrintStream类型的
   Scanner类
  该类不属于IO类,而属于util类
  它是一个可以用正则表达式来解析基本类型和字符串的简单文本扫描器
  Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的next 方法将得到的标记转换为不同类型的值。
  例如从键盘读取一行输入:
  <span style="font-size:14px;">      Scanner cin = new Scanner(System.in);
  String name = cin.nextLine();</span>
  过滤流与包装流:
  --- 即中间类,为哦我们往IO设备中写入各种类型的数据提供了帮助
  DataOutputStream
  writeBoolean()
  writeShort()
  writeChar()
  writeInt()
  ......
 程序 ---> 包装流类 ----> 节点流类 ---> 目标
  输入包装类 -- see p273 的例子
  输出包装类 --
  包装流的使用:
  DataOutputStream(OutputStream out) //将OutputStream包装为DataOutputStream
  BufferedInputStream 与 BufferOutputStream
  ---缓冲流:对IO进行缓冲
  利用缓冲流来进行改善性能
  构造方法:
  BufferedInputStream(InputStream in)
  创建一个带有32直接缓冲区的缓冲流
  BufferedInputStream(InputStream in, int size)
  创建具有指定缓冲区大小的缓冲区
  BufferedOutputStream(OutputStream out)
  创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
  BufferedOutputStream(OutputStream out, int size)
  创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
  DataInputStream 与 DataOutputStream
  ———— 提供了可读写各种基本数据类型数据的各种方法
  DataOutputStream提供了3种写入字符串的方法:
  1. writeBytes(String s)
  2. writeChars(String s)
  3. writeUTF(Strng s)
  PrintStream类
  提供了一系列的print和println方法,可以实现将基本数据类型的格式化成字符串输出。
  构造函数:
  PrintStream(OutputStream out)
  PrintStream(OutputStream out, boolean autoflush)
  PrintStream(OutputStream out, boolean autoflush, String encoding)
  autoflush控制java在遇到换行符(\n)时是否自动清空缓冲区
  Java的PrintStream对象具有多个重载的Print和Println方法
  在Windows的文本换行是 “\r\n”  而Linux下的文本换行是“\n”
  PrintWriter的println方法能根据不同的操作系统生成相应的换行符
  PrintWriter类 -- 与PrintStream相对应
  该类若设置autoFlush, 其会在使用了println方法后使用自动清空缓冲区
  ObjectInputStream 与 ObjectOutputStream
  用于存储和读取对象的输入输出流类。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
9天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
25天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
27天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
46 17
|
18天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
22天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
23天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
45 2
|
27天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
1月前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
33 3