一、OutputStream
- 此抽象类是表示输出字节流的所有类的超类。
- 输出流接受输出字节并将这些字节发送到某个接收器。
- 需要定义 OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。
- 直接已知子类:
- ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
public abstract class OutputStream implements Closeable, Flushable { /** *关闭此输出流并释放与此流有关的所有系统资源。 *close 的常规协定是:该方法将关闭输出流。 *关闭的流不能执行输出操作,也不能重新打开。 */ public void close() throws IOException{} //刷新此输出流并强制写出所有缓冲的输出字节,OutputStream 的 flush 方法不执行任何操作 public void flush() throws IOException{} //将 b.length 个字节从指定的 byte 数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同 //不用刷新,就直接写入数据了,和字符流不一样 public void write(byte[] b) throws IOException{} //将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流 public void write(byte[] b, int off, int len) throws IOException{} //将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 public abstract void write(int b) throws IOException; }
二、FileOutputStream
- 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
- 文件是否可用或能否可以被创建取决于基础平台。
- 特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。
- 在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
- FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter
public class FileOutputStream extends OutputStream { //创建一个向指定 File 对象表示的文件中写入数据的文件输出流 public FileOutputStream(File file) throws FileNotFoundException{} //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处 public FileOutputStream(File file, boolean append) throws FileNotFoundException{} //File file 可以换成 String name }
三、InputStream
- 此抽象类是表示字节输入流的所有类的超类。
- 需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。
- 直接已知子类
- InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
- AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream,
public abstract class InputStream implements Closeable { /** *返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。 *下一个调用可能是同一个线程,也可能是另一个线程。 *一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。 *注意,有些 InputStream 的实现将返回流中的字节总数,但也有很多实现不会这样做。 *试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的 */ public int available() throws IOException{} /** *从输入流中读取数据的下一个字节。 *返回 0 到 255 范围内的 int 字节值。 *如果因为已经到达流末尾而没有可用的字节,则返回值 -1。 *在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 */ public abstract int read() throws IOException; //从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 public int read(byte[] b) throws IOException{} //将输入流中最多 len 个数据字节读入 byte 数组。 public int read(byte[] b, int off, int len) throws IOException{} //跳过和丢弃此输入流中数据的 n 个字节 public long skip(long n) throws IOException{} }
四、FileInputStream
- FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
- FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
public class FileInputStream extends InputStream { //通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定 public FileInputStream(File file) throws FileNotFoundException{} //通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定 public FileInputStream(String name) throws FileNotFoundException{} }
五、示例
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * * 需求:拷贝任意文件 * */ public class InputStreamTest { public static void main(String[] args) throws IOException { String resName = "E:/m.jpg"; String desName = "c:/m.jpg"; copy(resName,desName); } public static void copy(String resName,String desName) throws IOException { FileInputStream fis = new FileInputStream(resName); FileOutputStream fos = new FileOutputStream(desName); byte[] buf = new byte[1024]; int num = 0; while((num=fis.read(buf))!=-1) { fos.write(buf); } fis.close(); fos.close(); System.out.println("复制成功"); } }
六、缓冲区字节流
/** *该类实现缓冲的输出流。 *通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。 */ public class BufferedOutputStream extends FilterOutputStream { //创建一个新的缓冲输出流,以将数据写入指定的底层输出流 public BufferedOutputStream(OutputStream out){} //创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。 public BufferedOutputStream(OutputStream out, int size){} }
/** *BufferedInputStream 为另一个输入流添加一些功能, *即缓冲输入以及支持 mark 和 reset 方法的能力。 *在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。 *在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。 */ public class BufferedInputStream extends FilterInputStream { //创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中。 public BufferedInputStream(InputStream in){} //创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中 public BufferedInputStream(InputStream in, int size){} }
七、示例
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class InputStreamReaderTest { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line=br.readLine())!=null) { if(line.equals("over")) break; bw.write(line.toUpperCase()); bw.newLine(); bw.flush(); } bw.close(); br.close(); } }
八、PrintStream
- PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
- 它还提供其他两项功能。
- 与其他输出流不同,PrintStream 永远不会抛出 IOException;
- 而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
- 另外,为了自动刷新,可以创建一个 PrintStream;
- 这意味着可在写入 byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('\n')。
- PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。
public class PrintStream extends FilterOutputStream implements Appendable, Closeable { //创建具有指定文件且不带自动行刷新的新打印流 public PrintStream(File file) throws FileNotFoundException{} //创建具有指定文件名称和字符集且不带自动行刷新的新打印流 public PrintStream(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException{} //创建新的打印流。此流将不会自动刷新 public PrintStream(OutputStream out){} //创建新的打印流 public PrintStream(OutputStream out, boolean autoFlush){} //创建新的打印流 public PrintStream(OutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException{} //创建具有指定文件名称且不带自动行刷新的新打印流 public PrintStream(String fileName) throws FileNotFoundException{} //创建具有指定文件名称和字符集且不带自动行刷新的新打印流 public PrintStream(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException{} //打印 boolean,char,double,float,int,long,char[] s,Ojbect obj,String s 值 public void print(boolean b){} public void print(boolean b){}//打印,然后终止该行 }
九、示例
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintStream; public class PrintStreamTest { public static void main(String[] args) throws IOException{ //设置标准输入 System.setIn(new FileInputStream("E:/m.txt")); //设置标准输出 System.setOut(new PrintStream("C:/m.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } br.close(); bw.close(); } }
import java.io.FileNotFoundException; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; /** * * 将异常信息存入异常文件 * */ public class PrintStreamTest { public static void main(String[] args) throws FileNotFoundException{ try{ int[] arr = new int[2]; System.out.println(arr[2]); } catch(Exception e){ System.setOut(new PrintStream("E:/exception.txt")); Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String time = sdf.format(d); System.out.println(time); e.printStackTrace(System.out); } } }
import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Properties; /** * * 将系统信息存入文件 * */ public class PrintStreamTest { public static void main(String[] args) throws FileNotFoundException{ Properties pro = System.getProperties(); pro.list(new PrintStream("E:/properties.txt")); } }
相关推荐
`java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...
在Java.io中,程序通过输入流读取来自源的数据,而通过输出流写入并发送数据到目的地。字节流是最基本的流类型,所有字节流类都继承自`InputStream`和`OutputStream`。 #### 关于InputStream和OutputStream 进行...
在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...
Java IO字节输出流是Java平台中用于处理数据输出的核心部分,它允许程序将字节数据写入到各种目标,如文件、网络连接或者内存缓冲区。在Java中,字节输出流通常与字节输入流配合使用,完成数据的读取和写入操作。...
字节流又分为输入流和输出流,例如InputStream和OutputStream是字节输入流和输出流的基类。 2. **基本流类**: - `FileInputStream` 和 `FileOutputStream` 用于读取和写入文件。 - `BufferedInputStream` 和 `...
- Java.IO流库提供了处理输入和输出数据的类,允许程序读取和写入数据到各种源和目的地,如文件、网络连接、内存缓冲区等。 - **输入流**(InputStream)用于读取数据,而**输出流**(OutputStream)用于写入数据...
根据处理的数据类型不同,Java IO流被分为两大类:字节流(byte streams)和字符流(character streams)。字节流主要处理二进制数据,而字符流则专门用于处理文本数据。 #### 二、Java IO流分类 ##### 字节流 - ...
在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...
对于字节流,`java.io.InputStream`是所有字节输入流的基类,而`java.io.OutputStream`则是所有字节输出流的基类。同样,`java.io.Reader`代表字符输入流,`java.io.Writer`代表字符输出流。值得注意的是,这四个类...
### Java中的字节流 #### 一、字节流简介 在Java中,字节流是一种处理二进制数据的基本方式。它通过一系列类来实现数据的读取和写入功能,这些类主要继承自`InputStream`和`OutputStream`两个抽象类。字节流非常...
Java中字节流分为两类:输入字节流(InputStream)和输出字节流(OutputStream)。InputStream的基类是`java.io.InputStream`,OutputStream的基类是`java.io.OutputStream`。例如,`FileInputStream`用于从文件中...
在Java中,它们是Java.io包下的基础类,提供了多种子类来处理不同类型的输出和输入操作,如`FileOutputStream`和`FileInputStream`用于文件操作,`SocketOutputStream`和`SocketInputStream`用于网络通信等。...
22. **java.io.BufferedInputStream**和**java.io.BufferedOutputStream**:对字节流进行缓冲,提高性能。 23. **java.net.URL**和**java.net.URLConnection**:处理网络资源的类,可用于下载或上传文件。 24. **...
IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念及其用法。 #### 字符流简介 字符流主要用来处理文本数据,它是以字符为单位进行读写的流。字符流分为字符...
字节流的所有读操作都继承自一个公共超类 java.io.InputStream 类。所有的写操作都继承自一个公共超类 java.io.OutputStream 类。InputStream 和 OutputStream 都是抽象类。InputStream 有 6 个低级输入流: 1. ...
Java IO中的字节流类主要分为两大类:`InputStream`和`OutputStream`。它们是所有字节流类的基类,其他具体子类都直接或间接地继承自这两个类。 - **InputStream 类** - `ByteArrayInputStream`: 提供了一个从...
### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...
这里我们以字节流为例,使用`java.io.FileInputStream`作为读取源文件的输入流,`java.io.FileOutputStream`作为写入目标文件的输出流。 下面是一个简单的文件复制示例: ```java import java.io.*; public class...
1. 字节流:Java的`java.io`包中提供了处理字节流的类,如`InputStream`和`OutputStream`作为所有字节输入流和输出流的基类。它们的子类如`FileInputStream`和`FileOutputStream`分别用于文件的读写。 2. 字符流:...