Java文件访问
在Java中和文件相关的IO操作主要有 FileInputStream、FileOutputStream、FileReader、FileWriter以及随机文件访问 RandomAccessFile。
1.Java IO读取文件
1.1 FileInputStream 文件输入流
FileInputStream 是 InputStream 的子类,所以 FileInputStream 是字节流(stream of bytes)的范畴。
1.1.1 FileInputStream 概述
主要构造函数
- FileInputStream(File file) : 通过File 对象来创建一个文件输入流
- FileInputStream(String name) : 通过文件地址创建文件输入流
方法概览 - close() 关闭流
- read() 读取一个字节
- read(byte[] b) 从这个输入流中读取b.length个字节的数据到一个字节数组中。
- read(byte[] b, int off, int len) 从该输入流中从off 开始将len个字节的数据读入一个字节数组。
- skip(long n) 跳过并丢弃输入流中的n个字节的数据。
1.1.2 FileInputStream 使用范例
public class FileInputStreamUse {
public static void main(String[] args) throws Exception {
//路径方式读取
readFileByPath();
//文件对象方式读取
readFileByFileObject();
}
private static void readFileByPath() {
String content = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("E:\\file.txt");
int size;
byte[] buffer = new byte[1024];
while ((size = inputStream.read(buffer)) != -1) {
content = new String(buffer, 0, size);
System.out.println(content);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (null != inputStream) {
inputStream.close();
}
} catch (Exception ex) {
System.out.println("关闭文件失败");
}
}
}
private static void readFileByFileObject() {
File file = new File("E:\\file.txt");
if (!file.exists()) {
throw new RuntimeException("文件不存在");
}
String content = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
int size;
byte[] buffer = new byte[1024];
while ((size = inputStream.read(buffer)) != -1) {
content = new String(buffer, 0, size);
System.out.println(content);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (null != inputStream) {
inputStream.close();
}
} catch (Exception ex) {
System.out.println("关闭文件失败");
}
}
}
}
1.1.2 FileReader概述
FileInputStream 是以字节的方式读取文件中的内容,和FileInputStream 不同的是 FileReader是字符方式的读取。所以FileReader是字符流的范畴。
关于字节流和字符流后面详细讨论
FileReader 使用范例
public class FileReaderUse {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("E:\\file.txt");
char[] chars = new char[1024];
int size = 0;
while ((size = reader.read(chars)) != -1) {
System.out.println(new String(chars, 0, size));
}
} catch (Exception ex) {
try {
if (null != reader) {
reader.close();
}
} catch (Exception e) {
System.out.println("关闭文件失败");
}
}
}
}
1.2 FileOutputStream文件输出流
和 FileInputStream一样 FileOutputStream是字节流的范畴,不同的是 FileOutputStream 是 OutputStream的子类实现。用于以字节流的形式输出一个文件。
主要构造函数
和 FileInputStream 一样 FileOutputStream除了有两个基本的构造函数之外还有一个 FileOutputStream(File file, boolean append) 构造函数,该构造函数的第二个参数 append 意思是是否以追加的方式输出。当这个参数是true的时候,文件在输出的时候会将写入的内容追加到文件的结尾。
以下是FileOutputStream全部的构造函数
1.2.1 FileOutputStream使用范例
public class FileOutputStreamUse {
public static void main(String[] args) {
//普通模式写文件
normalFileWrite();
//追加模式
appendFileWrite();
}
private static void normalFileWrite(){
File outFile = new File("E:\\out-file.txt");
byte[] outBytes = new String("这是输出内容").getBytes();
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(outFile);
outputStream.write(outBytes);
//刷新到磁盘
outputStream.flush();
}catch (Exception ex){
try {
if(null != outputStream){
outputStream.close();
}
}catch (Exception e){
System.out.println("关闭输出流失败");
}
}
}
private static void appendFileWrite(){
File outFile = new File("E:\\out-file.txt");
byte[] outBytes = new String("这是追加的内容").getBytes();
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(outFile,true);
outputStream.write(outBytes);
//刷新到磁盘
outputStream.flush();
}catch (Exception ex){
try {
if(null != outputStream){
outputStream.close();
}
}catch (Exception e){
System.out.println("关闭输出流失败");
}
}
}
}
1.2.2 FileWriter 概述
和FileReader一样FileWriter 也是字符流。所以使用方法上和FileReader是类似的
public class FileWriterUse {
public static void main(String[] args) {
FileWriter writer = null;
File outFile = new File("E:\\out-file.txt");
try {
//追加方式写入
writer = new FileWriter(outFile, true);
writer.write("\n");
writer.write("这个是通过writer追加的内容");
writer.flush();
} catch (Exception ex) {
try {
if (null != writer) {
writer.close();
}
} catch (Exception e) {
System.out.println("关闭文件失败");
}
}
}
}