所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
File类
File类是java.io包中唯一代表磁盘文件的对象,实现创建、删除、重命名文件等操作,File类的对象主要用来获取文件本身的一些信息。
文件的创建与删除
package com.huangxt.io;
import java.io.File;
import java.io.IOException;
/**
* @Title: FileTest
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/12 12:01
*/
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:/upload/word.txt");
if(file.exists()){
file.delete();
System.out.println("文件已删除");
}else{
file.createNewFile();
System.out.println("文件已创建");
}
}
}
获取文件信息
File类获取文件的方法就不一一列出,可自行查询API。
package com.huangxt.io;
import java.io.File;
/**
* @Title: FileTest2
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/12 12:07
*/
public class FileTest2 {
public static void main(String[] args) {
File file = new File("D:/upload/word.txt");
if(file.exists()){
String name = file.getName();
Long length = file.length();
boolean hidden = file.isHidden();
System.out.println("文件名称:"+name);
System.out.println("文件长度是:"+length);
System.out.println("该文件是隐藏文件吗?"+hidden);
}else{
System.out.println("该文件不存在");
}
}
}
FileInputStream与OutputStream类
package com.huangxt.io;
import sun.security.util.Length;
import java.io.*;
/**
* @Title: StreamTest
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/12 12:49
*/
public class StreamTest {
public static void main(String[] args) throws IOException {
File file = new File("D:/upload/word.txt");
OutputStream outputStream = new FileOutputStream(file);
byte[] bytes1 = "我是一只小小小鸟,怎么飞也飞不高奥".getBytes();
outputStream.write(bytes1);
outputStream.close();
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println("文件中的信息是:"+new String(bytes,0, len));
inputStream.close();
}
}
FileReader和FileWriter类
package com.huangxt.io;
import java.io.*;
/**
* @Title: charIOTest
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/12 13:10
*/
public class charIOTest {
public static void main(String[] args) throws IOException {
File file = new File("D:/upload/word.txt");
Writer writer = new FileWriter(file);
String str = "我是一只小小小鸟,怎么飞也飞不高奥";
writer.write(str);
writer.close(); //记得关闭,否则可能未出异常
Reader reader = new FileReader(file);
char[] chars = new char[1024];
int len = reader.read(chars);
System.out.println("文件内容是:"+new String(chars,0,len));
reader.close();
}
}
带缓存的输入/输出流
缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()、reset()方法收成为可能。
BufferedInputStream与BufferedOutputStream
BufferedInputStreamlei 可以对所有InputStream类进行带缓存区的包装已达到性能的优化。BufferedInputStream类有两个构造方法:
BufferdInputStream(InputStream in)
BufferdInputStream()InputStream in,int size)
第一种形式的构造方法创建了一个带有32个字节的缓存流;第二种形式的构造方法按指定的大小来创建缓存区。
一个最优的缓存区的大小,取决于他所在的操作系统、可用的内存空间以及机器配置。
BufferedOutputStream类也有两个构造方法:
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
第一种构造方法创建有一个32个字节的缓存区,第二种构造方法以指定的大小来创建缓存区。
数据输入/输出流
数据输入/输出流(DataInputStream类与DataOutputStream类)
package com.huangxt.io;
import java.io.*;
/**
* @Title: Example
* @Description:
* @Auther: huangxt
* @Version: 1.0
* @create 2019/7/12 17:49
*/
public class Example {
public static void main(String[] args) throws Exception {
FileOutputStream fileOutputStream = new FileOutputStream("D:/upload/word.txt");
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
dataOutputStream.writeUTF("使用writeUTF方法写入数据");
dataOutputStream.writeChars("使用writeChars方法写入数据");
dataOutputStream.writeBytes("使用writeBytes方法写入数据");
fileOutputStream.close();
dataOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("D:/upload/word.txt");
DataInputStream dataInputStream = new DataInputStream(fileInputStream);
System.out.println(dataInputStream.readUTF());
}
}
如果writeChars()和writeBytes()方法写入字符串后,在读取回来就不容易了。
ZIP压缩输入/输出流
ZipOutputStream与ZipInputStream类来实现文件的压缩/解压缩。