Java IO
来源:互联网 发布:备孕前准备 知乎 编辑:程序博客网 时间:2024/06/05 00:42
基本概念
在学习Java IO之前应该先了解一些基本概念。
流的概念和作用
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输的特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类
根据处理数据的类型的不同分为:字符流和字节流。
根据数据流向不同分为:输入流输出流。
字符流和字节流
字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:
(1) 读取单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读取多个字节。
(2) 处理对象不同:字节流能处理所有类型的数据(如图片、视频等),而字符流只能处理字符类型的数据。
(3) 字节流在操作的时候本身是不会用到缓冲区的,是对文件本身直接操作的;而字符流在操作的时候会用到缓冲区,是通过缓冲区操作文件。
结论:优先使用字节流。因为硬盘上所有的文件都是以字节的形式进行传输或者保存的,包括图片等内容。
输入流和输出流
以程序为中心,读入数据的流称为输入流,输入流只能进行读操作;写出数据的流称为输出流,输出流只能进行写操作。
装饰流和实体流
在Java IO流中除了可以按流向划分为输入流和输出流两类,按读写数据的基本单位划分为字节流和字符流以外,还可以按照流是否直接连接实际数据源,将流又可以划分为实体流和装饰流两大类。
实体流:实体流直接实现将数据源转换为流对象,在实体流类中实现了流和数据源之间的转换,实体流类均可单独进行使用。
装饰流:装饰流指不直接连接数据源,而是以其它流对象(实体流对象或装饰流对象)为基础建立的流类。该类流实现了将实体流中的数据进行转换,增强流对象的读写能力。装饰流不可以单独使用,必须配合实体流火装饰流进行使用。
Java流类图结构
对Java IO的类图结构有个清晰的了解有利于我们更好的学习。
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<T>, 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<T>)
- 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.security.BasicPermission (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.BufferedReader
- java.io.StreamTokenizer
- java.lang.Throwable (implements java.io.Serializable)
- java.lang.Error
- java.io.IOError
- java.lang.Exception
- java.io.IOException
- java.lang.Error
- 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-IO】IO入门
- Java IO:IO框架
- 【IO】java IO 总结
- java IO
- IO.java
- JAVA IO
- JAVA IO
- java IO
- java io
- JAVA IO
- java IO
- java IO
- java io
- java io
- java io
- java IO
- java IO
- java io
- nginx thinkphp
- 设计模式详解(总纲)
- 相对布局和网格布局
- Hibernate 查询
- 《Sphinx权威指南》 - Sphinx入门
- Java IO
- 用于分配空间的函数malloc、calloc、realloc
- 各位好啊 加入了CSDN这个大家庭啊
- java运行jar文件中某个类
- 在python中,获取用户输入信息
- solr5.5.0 中文分词<三>
- HTML5 FileReader 读取txt文件
- ASP.NET中引用JS不能调用JQuery问题 解决
- 数据库____操作表中数据