1.文件操作类: File
File file = new File(“PATH”)
NO.
方法
类型
描述
1
public File(String pathName)
构造
传递完整文件操作路径
2
public File(File parent, String child)
构造
设置父路径与子文件路径
3
public boolean createNewFile() throws IOException
普通
创建新文件
4
public boolean exists()
普通
判断给定路径是否存在
5
public boolean delete()
普通
删除指定路径的文件
6
public File getParentFile()
普通
取得当前路径的父路径
7
public boolean mkdirs()
普通
递归创建多级目录
8
public long length()
普通
取得文件大小,以字节为单位返回
9
public boolean isFile()
普通
判断给定路径是否是文件
10
public boolean isDirectory()
普通
判断给定路径是否是目录
11
public long lastModified()
普通
取得文件的最后一次修改日期时间
12
public String[] list()
普通
列出指定目录中的全部内容
13
public File[] listFiles()
普通
列出所有的路径以File类对象包装
2.字节流与字符流
1)字节流--------------------------------------
字节输出流:OutputStream
No.
OutputStream 类的常用方法
类型
描述
1
public void close() throws IOException
普通
关闭字节输出流
2
public void flush() throws throws IOExcetion
普通
强制刷新
3
public abstract void write(int b) throws IOException
普通
输出单个字节
4
public void write(byte[] b) throws IOException
普通
输出全部字节数组数据
5
public void write(byte[] b, int off, int len) throws IOException
普通
输出部分字节数组数据
OutputStream 的子类 FileOutputStream
No.
FileOutputStream 类的常用方法
类型
描述
1
public FileOutputStream(File file) throws FileNotFoundException
构造
将内容输出到指定的路径,如果文件已存在,则使用新的内容覆盖旧的内容
2
public FileOutputStream(File file,boolean append) throws FileNotFoundException
构造
如果将布尔参数设置为true,表示追加新的内容到文件中OutputStream output = FileOutputStream(file);
OutputStream output = FileOutputStream(file,true);
调用父类方法即可操作文件
字节输入流:InputStream
No.
InputStream 类的常用方法
类型
描述
1
public void close() throws IOException
普通
关闭字节输入流
2
public abstract int read() throws IOException
普通
读取单个字节,如果已经没有内容返回 -1
3
public int read(byte[] b) throws IOException
普通
将数据读取到字节数组中,同时返回读取长度
4
public int read(byte[] b, int off, int len)throws IOException
普通
将数据读取到部分字节数组中,指定数组接收的长度和数组的偏移量,同时返回读取长度
InputStream的子类FileInputStream
No.
FileInputStream 类的常用方法
类型
描述
1
public FileInputStream(File file) throws FileNotFoundException
普通
设置要读取文件数据的路径
2)字符流--------------------------------------
字符输出流:Writer
No.
Writer 类的常用方法
类型
描述
1
public void close() throws IOException
普通
关闭字符输出流
2
public void flush() throws throws IOExcetion
普通
强制刷新
3
public Writer append(CharSequence csq)
普通
追加数据
4
public void write(String str) throws IOException
普通
输出字符串数据
5
public void write(char[] cbuf) throws IOException
普通
输出字符数组数据
Writer类的子类FileWriter
No.
FileWriter类的常用方法
类型
描述
1
public FileWriter(File file) throws IOException
构造
设置输出文件
2
public FileWriter(File file ,boolean append) throws IOException
构造
设置输出文件以及是否进行追加
字符输入流:Reader
No.
Reader 类的常用方法
类型
描述
1
public void close() throws IOException
普通
关闭字符输入流
2
public int read() throws IOException
普通
读取单个数据
3
public int read() throws IOException
普通
读取单个字符
4
public int read(char[] cbuf) throws IOException
普通
读取数据到字符数组中,返回读取长度
5
public long skip(long n) throws IOException
普通
跳过字节长度
Reader类的子类FileReader
No.
FileReader 类的常用方法
类型
描述
1
public FileReader(File file) throws FileNotFoundException
构造
定义要读取的文件路径字节流与字符流的区别
1)字节流直接与终端文件进行数据交互,字符流需要将数据经过缓冲区处理才与终端文件数据交互。
2)在使用OutputStream 输出数据时即使最后没有关闭输出流,内容也可以正常输出,但是反过来如果使用的是字符输出流Writer,在执行到最后如果不关闭输出流,就表示在缓冲区中处理的内容不会被强制清空,所以就不会输出数据。如果有特殊情况不能关闭字符输出流,可以使用flush()方法强制清空缓冲区。
在实际开发中流的选用原则
在开发中,对于字节数据处理是比较多的,例如:图片,音乐,电影,文字。而字符流最大的好处是它可以进行中文的有效处理。在开发中,如果要处理中文时应优先考虑字符流,如果没有中文问题,建议使用字节流。
3.转换流
通过继承结构可以发现,FileWriter与FileReader都是转换流的子类,也就证明所有要读取的文件数据都是字节数据,所有的字符都是在内存中处理后形成的
字节输入流转字符输入流 InputStreamReader
字节输出流转字符输出流OutPutStreamWriter
定义结构
public class InputStreamReader extends Reader
public class OutputStreamWriter extends Writer
构造方法
public InputStreamReader(InputStream in)
public OutputStreamWriter(OutputStream out)
4.案例文件复制
InputStream in = new FileInputStream(inFile);
OutputStream out = new FileOutputStream(outFile);
int tmp = 0 ; //保存每次读取的数据长度
byte data [] = new byte[1024]; //每次读取1024个字节
while((temp=in.read(data)) != -1){ //循环读取数据
out.write(data,0,tmp); //输出数组
}
in.close();
out.close();
5.字符编码
OutputStream output = new FileOutputStream(file);
output.write("你好".getBytes("ISO8859-1"));//设置输出的字符编码
output.close();
6.内存流
假设一种应用需要进行IO操作,但是又不想在磁盘上产生文件,就可以将内存当做一个临时文件进行操作。
内存流:
字节内存流(常用)::ByteArrayInputStream(内存字节输入流);ByteArrayOutputStream(内存字节输出流)
字符内存流:CharArrayReader(内存字符输入流);CharArrayWriter(内存字符输出流)
内存流定义的构造方法:
ByteArrayInputStream类构造:public ByteArrayInputStream(byte[] buf)
ByteArrayOutputStream类构造:public ByreArrayOutputStream()
String str = "hello world";
InputStream input = new ByteArrayInputStream(str.getBytes());
OutputStream output = new ByteArrayOutputStream();
int temp = 0 ;
while((temp=input.read()) != -1 ){
ouput.write(Character.toUpperCase(temp));//转大写
}
System.out.println(output);
input.close();
output.close();
7.打印流
在java.io包中OutputStream是进行输出操作的最核心控制类,但是利用OutputStream会存在一个问题:所有的输出数据必须以字节类型的数据为主,也就是说如果要输出的数据是int(Integer)、double(Double)、java.util.Date等常用的类型都需要将其转换为字节后才可以输出。为了解决这个问题,java.io中提供了打印流。
java.io.OutputStream类主要是进行数据输出,如果要设计更加合适的打印流操作类,就必须解决OutputStream输出数据类型有限(只有byte类型)的问题。这时可以采用包装设计模式,将OutputStream类利用其它类进行包装、并且可以在这个类中提供了各种常见数据类型的输出操作,这样用户在进行输出操作时就可以回避字节数据的操作。
java.io提供了两个数据打印流的操作类:PrintStream(打印字节流)、PrintWriter(打印字符流)
PrintStream类的常用方法
类型
描述
public PrintStream(OutputStream out)
构造
通过已有OutputStream确定输出目标
public void print(数据类型 参数名称)
普通
输出各种常见的数据类型
public void println(数据类型 参数名称)
普通
输出各种常见的数据类型,并追加一个换行
PritnStrem与PrintWriter两个类在使用上是完全一样的
8.System类对IO的支持
System类与IO有关的3个对象常量
常量
类型
描述
1
public static final PrintStream err
常量
显示器上错误输出
2
public static final PrintStream out
常量
显示器上信息输出
3
public static final InputStream in
常量
键盘数据输入
可以发现,err与out两个对象的类型都属于PrintStream 类型,in属于 InputStream类型
9.字符缓冲流
为了可以进行完整数据的输入操作,最好的做法是采用缓冲区的方式对输入的数据进行暂存,而后程序可以利用输入流一次性读取内容。
字符缓冲区流:BufferedReader、BufferedWriter
字节缓冲区流:BufferedInputStream、BufferedOutputStream
BufferedReader类的常用方法
类型
描述
public BufferedReader(Reader in)
构造
设置字符输入流
public String readLine() throws IOException
普通
读取一行数据,默认一"\n"为分隔符
10.扫描流:Scanner
Scanner类中定义的常用方法
类型
描述
1
public Scanner(InputStream source)
构造
接受InputStream输入流对象,此为输入源
2
public boolean hasNext()
普通
判断是否有数据输入
3
public String next()
普通
取出输入数据,以String返回
4
public boolean hasNextXxx()
普通
判断是否有指定类型数据存在
5
public 数据类型 nextXxx()
普通
取出指定数据类型的数据
6
public Scanner useDelimiter(String pattern)
普通
设置读取的分隔符
11.对象序列化