Java IO

基本概念

在学习Java IO之前应该先了解一些基本概念。

流的概念和作用

         流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输的特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类

         根据处理数据的类型的不同分为:字符流和字节流。

      根据数据流向不同分为:输入流输出流。

 

字符流和字节流

         字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

         字节流和字符流的区别:

(1)    读取单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读取多个字节。

(2)    处理对象不同:字节流能处理所有类型的数据(如图片、视频等),而字符流只能处理字符类型的数据。

(3)    字节流在操作的时候本身是不会用到缓冲区的,是对文件本身直接操作的;而字符流在操作的时候会用到缓冲区,是通过缓冲区操作文件。

结论:优先使用字节流。因为硬盘上所有的文件都是以字节的形式进行传输或者保存的,包括图片等内容。

 

输入流和输出流

         以程序为中心,读入数据的流称为输入流,输入流只能进行读操作;写出数据的流称为输出流,输出流只能进行写操作。

 

装饰流和实体流

         在Java IO流中除了可以按流向划分为输入流和输出流两类,按读写数据的基本单位划分为字节流和字符流以外,还可以按照流是否直接连接实际数据源,将流又可以划分为实体流和装饰流两大类。

    实体流:实体流直接实现将数据源转换为流对象,在实体流类中实现了流和数据源之间的转换,实体流类均可单独进行使用。

    装饰流:装饰流指不直接连接数据源,而是以其它流对象(实体流对象或装饰流对象)为基础建立的流类。该类流实现了将实体流中的数据进行转换,增强流对象的读写能力。装饰流不可以单独使用,必须配合实体流火装饰流进行使用。

Java流类图结构

         对Java IO的类图结构有个清晰的了解有利于我们更好的学习。

Java IO_第1张图片

Java IO 类

1.  File

File类以路径的形式表示文件或目录,表示的文件或目录可以不存在。File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否刻度、获取当前文件的路径名,判断指定的文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。File类以路径的形式表示文件或目录,表示的文件或目录可以不存在。

File类中静态字段

static String

 pathSeparator
          与系统有关的路径分隔符,为了方便,它被表示为一个字符串。

static char

 pathSeparatorChar
          与系统有关的路径分隔符。

static String

 separator
          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

static char

 separatorChar
          与系统有关的默认名称分隔符。

pathSeparator、pathSeparatorChar和separator、separatorChar的区别,前者是多个路径的分隔符,后者是同一个路径的分隔符。例如在windows系统中前者表示“;”,后者表示“\”

 

File类中常用方法

 

 

 

 

创建

createNewFile()

在指定位置创建一个空文件,成功返回ture,如果已存在就不创建然后返回false

mkdir()

在指定位置创建目录,只会创建最后一级目录,如果上机目录不存在则抛出异常

mkdirs()

在指定位置创建目录,会创建路径中所有不存在的目录

renameTo(File dest)

重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。

 

 

删除

delete()

删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。

deleteOnExit()

在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

 

 

判断

exists()

文件或文件夹是否存在。

isFile()

是否是一个文件,如果不存在,则始终为false。

isDirectory()   

是否是一个目录,如果不存在,则始终为false。

isHidden()

是否是一个隐藏的文件或是否是隐藏的目录。

isAbsolute()

测试此抽象路径名是否为绝对路径名。

 

 

 

 

 

 

 

获取

文件相关

getName()

获取文件或文件夹的名称,不包含上级路径。

getPath()

返回绝对路径,可以是相对路径,但是目录要指定

getAbsolutePath()

获取文件的绝对路径,与文件是否存在没关系

length()

获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

getParent()

返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

lastModified()

获取最后一次被修改的时间

文件夹相关

listRoots()

列出所有的根目录(Window中就是所有系统的盘符)

list()

返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。       

list(FilenameFilter filter)

返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

listFiles()

返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。

listFiles(FilenameFilter filter)

返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

 

创建文件



import java.io.File;
import java.io.IOException;
 
public class Demo1{
         public static void main(String []args) throws IOException{
                  File file = new File("F:\\abc.txt");
                  boolean flag = file.createNewFile();
                  System.out.println("创建文件成功吗? "+flag);
         }
}

 

删除文件


import java.io.File;
import java.io.IOException;
 
public class Demo1{
         public static void main(String []args) throws IOException{
                  File file = new File("F:\\abc.txt");
                  boolean flag = file.delete();
                  System.out.println("删除文件成功吗? "+flag);
         }
}

 

2.  InputStream

InputStream子类:

ByteArrayInputStream

三种基本的介质流,它们分别从Byte数组、StringBuffer和本地文件中读取数据

StringBufferInputStream

FileInputStream

PipedInputStream

从其它线程共用的管道中读取数据。

ObjectInputStream

ObjectInputStrea和所有FilterInputStream子类都是装饰流。

FilterInputStream

SequenceInputStream

表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

InputStream常用方法

read()

从输入流中读取数据的下一个字节。

read(byte[] b)

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

read(byte[] b, int off, int len)

将输入流中最多 len 个数据字节读入 byte 数组。

 

FileInputStream读取文件内容


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
 
public class Demo1{
         public static void main(String []args) throws IOException{
                  File file = new File("F:\\abc.txt");
                  FileInputStream fileInputStream = new FileInputStream(file);
                  byte[] b = new byte[1024];
                  fileInputStream.read(b);
                  System.out.println(new String(b));
                  fileInputStream.close();
         }      
}

 

3.  OutputStream

OutputStream子类

ByteArrayOutputStream

两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。

FileOutputStream

PipedOutputStream

向与其它线程共用的管道中写入数据

ObjectOutputStream

ObjectOutputStrm和所有FilterOutputStream的子类都是装饰流

FilterOutputStream

常用方法

close()

关闭此输出流并释放与此流有关的所有系统资源。

flush()

刷新此输出流并强制写出所有缓冲的输出字节。

write(byte[] b)

将 b.length 个字节从指定的 byte 数组写入此输出流。

write(byte[] b, int off, int len)

将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

write(int b)

将指定的字节写入此输出流

 

FileOutputStream写文件


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Demo1{
         public static void main(String[] args)    throws IOException{
                  File file = new File("F:\\abc.txt");
                  FileOutputStream fileOutputStream = new FileOutputStream(file);
                  String str = "hello world!";
                  fileOutputStream.write(str.getBytes());
                  fileOutputStream.close();
         }
}

 

4.  Reader

Reader子类

CharReader

两种基本的介质流,它们分别将Char 数组、String中读取数据。

StringReader

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

FilterReader

用于读取已过滤的字符流的抽象类。其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。

PipedReader

从与其它线程共用的管道中读取数据。

InputStreamReader

是一个连接字节流和字符流的桥梁. 它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

常用方法

close()

关闭该流并释放与之关联的所有资源。

read()

读取单个字符。

read(char[] cbuf)

将字符读入数组。

read(char[] cbuf, int off, int len)

将字符读入数组的某一部分。

read(CharBuffer target)

试图将字符读入指定的字符缓冲区。

 

FileReader读取文件


import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
public class Demo1{
         public static void main(String[] args)    throws IOException{
                  File file = new File("F:\\abc.txt");
                  FileReader fileReader = new FileReader(file);
                  char[] ch = new char[1024];
                  int length;
                  while((length = fileReader.read(ch)) != -1){
                          System.out.println(new String(ch));
                  }
        FileReader.close();
         }
}

 

5.  Writer

Writer子类

CharArrayWriter

两种基本的介质流,它们分别向Char 数组、String 中写入数据。

StringWriter

PipedWrite

是向与其它线程共用的管道中写入数据。

BufferedWriter

是一个装饰器为Writer 提供缓冲功能

OutputStreamWriter

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

FilterWriter

用于写入已过滤的字符流的抽象类

PrintWriter

向文本输出流打印对象的格式化表示形式

常用方法

append(char c)

将指定字符添加到此 writer。

append(CharSequence csq)

将指定字符序列添加到此 writer。

append(CharSequence csq, int start, int end)

将指定字符序列的子序列添加到此 writer.Appendable。

close()

关闭此流,但要先刷新它。

write(char[] cbuf)

写入字符数组。

write(char[] cbuf, int off, int len)

写入字符数组的某一部分。

write(String str)

写入字符串。

write(String str, int off, int len)

写入字符串的某一部分。

 

FileWriter写入文件


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
public class Demo1{
         public static void main(String[] args) throws IOException {
                  File file = new File("F:\\abc.txt");
                  FileWriter writer = new FileWriter(file);
                  String str = "hello java!";
                  writer.write(str);
                  writer.close();
         }
}

 

 

java.io 的分层结构

  • java.lang.Object
    • java.io.Console (implements java.io.Flushable)
    • java.io.File (implements java.lang.Comparable, java.io.Serializable)
    • java.io.FileDescriptor
    • java.io.InputStream (implements java.io.Closeable)
    • java.io.ByteArrayInputStream
    • java.io.FileInputStream
    • java.io.FilterInputStream
      • java.io.BufferedInputStream
      • java.io.DataInputStream (implements java.io.DataInput)
      • java.io.LineNumberInputStream
      • java.io.PushbackInputStream
    • java.io.ObjectInputStream (implements java.io.ObjectInput, java.io.ObjectStreamConstants)
    • java.io.PipedInputStream
    • java.io.SequenceInputStream
    • java.io.StringBufferInputStream
  • java.io.ObjectInputStream.GetField
  • java.io.ObjectOutputStream.PutField
  • java.io.ObjectStreamClass (implements java.io.Serializable)
  • java.io.ObjectStreamField (implements java.lang.Comparable)
  • java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)
    • java.io.ByteArrayOutputStream
    • java.io.FileOutputStream
    • java.io.FilterOutputStream
      • java.io.BufferedOutputStream
      • java.io.DataOutputStream (implements java.io.DataOutput)
      • java.io.PrintStream (implements java.lang.Appendable, java.io.Closeable)
    • java.io.ObjectOutputStream (implements java.io.ObjectOutput, java.io.ObjectStreamConstants)
    • java.io.PipedOutputStream
  • java.security.Permission (implements java.security.Guard, java.io.Serializable)
    • java.security.BasicPermission (implements java.io.Serializable)
      • java.io.SerializablePermission
    • java.io.FilePermission (implements java.io.Serializable)
  • java.io.RandomAccessFile (implements java.io.Closeable, java.io.DataInput, java.io.DataOutput)
  • java.io.Reader (implements java.io.Closeable, java.lang.Readable)
    • java.io.BufferedReader
      • java.io.LineNumberReader
    • java.io.CharArrayReader
    • java.io.FilterReader
      • java.io.PushbackReader
    • java.io.InputStreamReader
      • java.io.FileReader
    • java.io.PipedReader
    • java.io.StringReader
  • java.io.StreamTokenizer
  • java.lang.Throwable (implements java.io.Serializable)
    • java.lang.Error
      • java.io.IOError
    • java.lang.Exception
      • java.io.IOException
    • java.io.CharConversionException
    • java.io.EOFException
    • java.io.FileNotFoundException
    • java.io.InterruptedIOException
    • java.io.ObjectStreamException
      • java.io.InvalidClassException
      • java.io.InvalidObjectException
      • java.io.NotActiveException
      • java.io.NotSerializableException
      • java.io.OptionalDataException
      • java.io.StreamCorruptedException
      • java.io.WriteAbortedException
    • java.io.SyncFailedException
    • java.io.UnsupportedEncodingException
    • java.io.UTFDataFormatException
  • java.io.Writer (implements java.lang.Appendable, java.io.Closeable, java.io.Flushable)
    • java.io.BufferedWriter
    • java.io.CharArrayWriter
    • java.io.FilterWriter
    • java.io.OutputStreamWriter
      • java.io.FileWriter
    • java.io.PipedWriter
    • java.io.PrintWriter
    • java.io.StringWriter

 

你可能感兴趣的:(Java基础)