Java基础-IO

Java的IO包主要关注数据源的读取和输出到目标媒介。示意图如下

常用的源数据和目标媒介如下:

Files

Pipes

Network Connections

In-memory Buffers (e.g. arrays)

System.in, System.out, System.error

流从概念上说一个连续的数据流,既可以从流中读取数据,也可以往流中写入数据。主要分为字节流和字符流,字节流指以字节为单位进行读写,字符流指以字符为单位进行读写。
一个程序需要InputStream或者Reader从数据源读取数据,需要OutputStream或者Writer将数据写入到目标媒介中。示意图如下:

Stream特征和分类

Java IO针对不同的业务场景,不同的功能,设计了不同的类,各类用途如下:

File Access

Network Access

Internal Memory Buffer Access

Inter-Thread Communication (Pipes)

Buffering

Filtering

Parsing

Reading and Writing Text (Readers / Writers)

Reading and Writing Primitive Data (long, int etc.)

Reading and Writing Objects

通过输入、输出、基于字节或者字符、以及其他比如缓冲、解析之类的特定用途可以将Java IO流进行如下划分:




















































































    Byte Based   Character Based  
    Input   Output   Input   Output  
Basic   InputStream   OutputStream   Reader
InputStreamReader
  Writer
OutputStreamWriter
 
Arrays   ByteArrayInputStream   ByteArrayOutputStream   CharArrayReader   CharArrayWriter  
Files   FileInputStream
RandomAccessFile
  FileOutputStream
RandomAccessFile
  FileReader   FileWriter  
Pipes   PipedInputStream   PipedOutputStream   PipedReader   PipedWriter  
Buffering   BufferedInputStream   BufferedOutputStream   BufferedReader   BufferedWriter  
Filtering   FilterInputStream   FilterOutputStream   FilterReader   FilterWriter  
Parsing   PushbackInputStream
StreamTokenizer
      PushbackReader
LineNumberReader
     
Strings           StringReader   StringWriter  
Data   DataInputStream   DataOutputStream      
 
Data - Formatted       PrintStream       PrintWriter  
Objects   ObjectInputStream   ObjectOutputStream          
Utilities   SequenceInputStream
             
File类

在讨论Stream的具体使用前,我们先看看IO库里面的File类。
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等,但File对象却不能直接访问文件内容本身,要查看内容,则需要使用IO流。
通过以下构造方法创建一个File对象。

通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。

File(File parent, String child);

通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。

File(String pathname)

根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(String parent, String child)

通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。

File(URI uri)

由于其方法均比较简单,不再罗列,具体见https://docs.oracle.com/javase/8/docs/api/。一个具体的实例如下:

package com.molyeo.java.io; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.util.Arrays; /** * Created by zhangkh on 2018/7/19. */ public class FileDemo { static Logger logger = LoggerFactory.getLogger(FileDemo.class.getName()); public static void main(String[] args) throws IOException { File path = new File("."); if (path.isDirectory()) { logger.info("root: directory is {}", path.getAbsolutePath()); String[] list = path.list(); Arrays.sort(list, String.CASE_INSENSITIVE_ORDER); for (String dirItem : list) { File file = new File(path, dirItem); if (file.isDirectory()) { logger.info("child: {} is a directory", dirItem); } else { logger.info("child: {} is a file", dirItem); } } } else { logger.info("root is not a directory"); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjswp.html