1. File类
File类:java.io.FileFile(String pathname):根据路径构造File对象File(String parent, String child):根据父路径与子路径构造File对象File(File parent, String child):根据父路径的File对象与子路径构造File对象boolean createNewFile():创建文件,如果文件已存在则返回falseboolean exists():判断该路径是否存在boolean mkdir():创建文件夹,不会创建父级目录boolean mkdirs():创建文件夹,当父级目录不存在时会创建父级目录boolean renameTo(File dest):重命名指定路径,路径不同时移动文件boolean delete():删除文件或文件夹;如果删除文件夹,该文件夹必须为空boolean isDirectory():判断是否是目录boolean isFile():判断是否是文件boolean canRead():判断是否可读;windows下所有文件都是可读的boolean canWrite():判断是否可写boolean isHidden():判断是否隐藏boolean setReadable():设置是否可读;windows下无效boolean setWritable():设置是否可写String getAbsolutePath():获取绝对路径String getPath():获取路径;路径为构造是传入的路径String getName():获取名称long length():获取长度,单位为字节数;文件夹的长度为0,获取文件夹大小可使用递归获取所有子文件大小再求和long lastModified():获取最后一次修改时间String[] list():获取指定目录下的所有文件与文件夹的名称File[] listFiles():获取指定目录下的所有文件与文件夹组成的File对象数组String list(FilenameFilter filter):获取满足过滤器的文件名FilenameFilter接口:java.io.FilenameFilterboolean accept(File dir, String name):根据结果决定文件列表是否包含;返回true时,文件列表包含该文件
2. IO流
- IO流:用于处理设备之间的数据传输
- 按流向分为:输入流与输出流
- 按操作类型分为:字节流与字符流;字节流可操作任何数据,字符流只能操作文本数据
- 超类:为抽象类
- 字节流:
InputStream、OutputStream - 字符流:
Reader、Writer
- 字节流:
- IO流操作:导包 >> 异常处理 >> 释放资源
- 简单文件加密:可利用一个数被另一个数异或两次结果不变原理
- 字符流:字节读写字符;读取时将字节转成字符,写入时将字符转为字节
3. FileInputStream类
FileInputStream类:java.io.FileInputStream- 该类继承于
InputStream FileInputStream(File file):通过File对象创建输入流FileInputStream(String name):通过文件名创建输入流int read():读取一个字节,到末尾时返回-1int read(byte[] buf):读取最多buf.length个字节到数组中,返回读取到的字节个数,到末尾时返回-1int available():获取该输入流剩余的字节数void close():关闭输入流- 典型语句:
int n; while((n = f.read()) != -1) { ... }
4. FileOutputStream类
FileOutputStream类:java.io.FileOutputStream- 该类继承于
OutputStream FileOutputStream(File file):通过File对象创建输出流,若没有文件则新建文件FileOutputStream(String name):通过文件名创建输入流,若没有文件则新建文件FileOutputStream(String name, boolean append):append为true时为追加写入;append为false时会将原有的文件清空再写入,默认为false;若没有文件则新建文件void write(byte[] buf):将数组写入到输出流void write(byte[] buf, int off, int len):将buf从off开始的len个字节写入到输出流void write(int b):将b去掉前3个字节写入到输出流void close():关闭输出流
5. BufferedInputStream类
BufferedInputStream类:java.io.BufferedInputStreamBufferedInputStream(InputStream in):由InputStream对象创建缓冲输入流int read():读取1个字节int read(byte[] buf, int off, int len):读取len个字节到数组void close():关闭缓冲输入流;关闭后对应的InputStream流也关闭- 默认内置数组大小为
8192字节
6. BufferedOutputStream类
BufferedOutputStream类:java.io.BufferedOutputStreamBufferedOutputStream(OutputStream out):由OutputStream对象创建缓冲输出流void write(int b):写入1个字节,自动去掉b的高24位void write(byte[] buf, int off, int len):将buf从off开始的len个字节写入void flush():刷新缓冲输出流void close():关闭缓冲输入流,close之前会将剩余的数据刷新;关闭后对应的InputStream流也关闭- 字节流读取中文时,可能会出现乱码;写中文时必须先使用
getBytes()方法转成字节数组
7. IO流异常处理
-
JDK1.7之前
FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("xxx"); fos = new FileOutputStream("xxx"); ... } finally { try { if (fis != null) { fis.close(); } } finally { if (fos != null) { fos.close(); } } } -
JDK1.7之后
/* 执行完大括号内语句后,自动调用对象的close()方法 */ /* 该格式需要小括号内的对象实现AutoCloseable接口,否则会报错 */ try (FileInputStream fis = new FileInputStream("xxx"); FileOutputStream fos = new FileOutputStream("xxx")) { ... }
8. FileReader类
FileReader类:java.io.FileReader- 该类继承于
InputStreamReader FileReader(File file):根据File对象构造字符输入流FileReader(String filename):根据文件名构造字符输入流int read():读取单个字符,末尾返回-1int read(char[] buf, int offset, int length):读入字符到数组void close():关闭字符输入流
9. FileWriter类
FileWriter类:java.io.FileWriter- 该类继承于
OutputStreamWriter FileWriter(File file):根据File对象构造字符输出流FileWriter(String filename):根据文件名构造字符输出流FileWriter(String filename, boolean append):根据文件名构造字符输出流;append为true时为追加写入文件,默认为false,为清空文件void write(int c):写入单个字符,自动去掉int的高16位void write(char[] buf, int off, int len):写入数组的一部分到字符输出流void write(String s, int off, int len):写入字符串的一部分到字符输出流void flush():刷新缓冲区void close():关闭字符输出流- 默认字符流的内置数组大小为
1024个字符(2048字节) - 字符流不可以用于拷贝非纯文本文件,因为在将字节转为字符是若找不到对应的字符就会用
?代替,写出时相当于写出的是?
10. BufferedReader类
BufferedReader类:java.io.BufferedReaderBufferedReader(Reader in):根据Reader对象构造缓冲字符输入流String readLine():读取一行,末尾时返回null;行结束符\r、\n
11. BufferedWriter类
BufferedWriter类:java.io.BufferedWriterBufferedWriter(Writer out):根据Writer对象构造缓冲字符输出流void newLine():写入一个行分隔符;Windows下为\r\n,Linux下为\n,Mac下为\r- 默认内置数组大小为
8192个字符(16K字节)
12. LineNumberReader
LineNumberReader类:java.io.LineNumberReader- 该类继承于
BufferedReader LineNumberReader(Reader in):根据Reader对象构造LineNumberReaderint getLineNumber():获取当前行号,默认从0开始void setLineNumber():设置当前行号,不会改变流中的读取位置
13. InputStreamReader类
InputStreamReader类:java.io.InputStreamReaderInputStreamReader(InputStream in, String charset):创建指定字符集的InputStreamReader对象,如utf-8、gbk等- 该对象可将字符流与字节流相互转换
- 可使用
BufferedReader对该对象进行再次包装
14. OutputStreamWriter类
OutputStreamWriter类:java.io.OutputStreamWriterOutputStreamWriter(OutputStream out, String charset):创建指定字符集的InputStreamWriter对象,如utf-8、gbk等- 该对象可将字符流与字节流相互转换
- 可使用BufferedWriter对该对象进行再次包装
15. SequenceInputStream类
SequenceInputStream类:java.io.SequenceInputStreamSequenceInputStream(InputStream s1, InputStream s2):由s1与s2构造序列流,先读取s1再读取s2,该方法整合两个输入流SequenceInputStream(Enumeration<? extens InputStream> e):将多个输入流整合为一个输入流Enumeration对象可通过Vector类的elements方法获取,即先将InputStream添加到Vector集合中,再返回相应的对象
int read():读取int read(bytep[] b, int off, int len):读取指定长度void close():关闭序列流,会将s1和s2都关闭
16. ByteArrayOutputStream类
ByteArrayOutputStream类:java.io.ByteArrayOutputStreamByteArrayOutputStream():创建内存输出流,数据写入到内存中的数组void write(int b):写入单个字节void write(byte[] b, int off, int len):写入指定长度的字节int size():获取当前缓冲区的大小byte[] toByteArray():将缓冲区的内容存入数组并返回String toString():使用默认字符集,将缓冲区的内容转为字符串void close():无效,不用关闭- 内存输出流是将数据全部存放在内存中再读出来,可解决中文乱码
17. RandomAccessFile类
RandomAccessFile类:java.io.RandomAccessFile- 该类继承于
Object类,不属于流 RandomAccessFile(File file, String mode):通过File对象构造RandomAccessFile(String name, String mode):通过文件名构造int read():读取int read(byte[] b):读取int read(byte[] b, int off, int len):读取String readLine():读取一行void write(int b):写入void write(byte[] b):写入void write(byte[] b, int off, int len):写入void seek(long pos):设置访问位置指针,从0开始- 该类可以读取或写入一个
Byte、Char、Double、Int、Float、Long、Boolean - 该类包含
InputStream与OutputStream的功能,支持对文件的随机访问
18. ObjectOutputStream类
ObjectOutputStream类:java.io.ObjectOutputStreamObjectOutputStream(OutputStream out):由out创建对象输出流void writeObject(Object obj):将对象写入流,即序列化,被写入的对象必须实现Serializable接口- 实现
Serializable的类可以添加serialVersionUID常量,用于标识类的版本,默认id号是随机的 - 序列化:将对象写出到文件中
- 反序列化:从文件中读出对象
19. ObjectInputStream类
ObjectInputStream类:java.io.ObjectInputStreamObjectInputStream(InputStream in):由in创建对象输入流Object readObject():从流中读取对象,即反序列化- 序列化时有多个对象时,可先将这些对象存入到集合中,再把集合序列化,这样只需要读取一次即可,避免出现
EOFException
20. DataOutputStream类
DataOutputStream类:java.io.DataOutputStreamDataOutputStream(OutputStream out):创建数据输出流对象void write(int b):写入void write(byte[] b, int off, int len):写入void writeBoolean(boolean value):写值,占1Bvoid writeChar(char value):写值,占2Bvoid writeShort(short value):写值,占2Bvoid writeInt(int value):写值,占4Bvoid wirteLong(long value):写值,占8Bvoid wirteByte(byte value):写值,占1Bvoid writeFloat(float value):写值,占4Bvoid writeDouble(double value):写值,占8B
21. DataInputStream类
DataInputStream类:java.io.DataInputStreamDataInputStream(InputStream in):创建数据输入流对象boolean readBoolean(boolean value):读值,占1Bchar readChar(char value):读值,占2Bshort readShort(short value):读值,占2Bint readInt(int value):读值,占4Blong readLong(long value):读值,占8Bbyte readByte(byte value):读值,占1Bfloat readFloat(float value):读值,占4Bdouble readDouble(double value):读值,占8B
22. PrintStream类
PrintStream类:java.io.PrintStreamPrintStream(OutputStream out):创建打印流字节流void print():打印void println():打印并换行,支持自动刷出,即该方法会刷新缓冲区void write(int b):写入字节
23. PrintWriter类
PrintWriter类:java.io.PrintWriterPrintWriter(OutputStream out):创建打印字符流void print():打印void println():打印并换行,支持自动刷出,即该方法会刷新缓冲区void write(int b):写入字符
24. Properties类
Properties类:java.util.Properties- 该类继承于
Hashtable Properties():创建无默认值的属性列表Object put(Object key, Object value):添加,键值都为StringObject setProperty(String key, String value):底层调用put方法String getProperty(String key):获取key对应的属性Enumeration<?> propertyNames():返回所有键的枚举Enumeration类:java.util.Enumerationboolean hasMoreElements():判断是否有元素E nextElement():获取下一个元素
void load(InputStream in):从输入流中读取属性void store(OutputStream out, String comments):将属性写入输出流;comments为描述,可传入null- 该类没有泛型,键值类型为
String - 配置文件建议后缀为
.properties