Java IO主要可分为两部分,一部分是对文件本身的操作,一部分是对文件内容的操作。
一、对文件本身操作
该部分所对应的主要类是File,主要操作如下:
package com.ass;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("E://test.txt");
System.out.println("文件是否可执行:" + file.canExecute());
System.out.println("文件是否可读取:" + file.canRead());
System.out.println("文件是否可写入:" + file.canWrite());
System.out.println("文件是否可存在:" + file.exists());
System.out.println("获取文件真是路径:" + file.getAbsolutePath());
System.out.println("获取文件父路径:" + file.getParent());
System.out.println("判断是否是文件夹:" + file.isDirectory());
System.out.println("设置文件为只读权限:" + file.setReadOnly());
System.out.println("设置文件读权限:" + file.setReadable(true));
System.out.println("设置文件写读权限:" + file.setWritable(true));
System.out.println("设置文件可执行权限:" + file.setExecutable(true));
}
}
其他操作可查看jdk文档
二、对文件内容进行操作
(一)、通过字节流操作文件内容
该操作主要由抽象类java.io.InputStream及其子类,抽象类java.io.OutputStream及其子类进行。
1、输入流
InputStream(输入流-抽象类)->FileInputStream(文件输入流)
->BufferedInputStream(缓存输入流-效率高)
主要由以上三个类组成,基本操作如下:
package com.ass.io;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileInputOpt {
public static void main(String[] args) throws IOException {
// 使用InputStream
// InputStream i=System.in;
// int tempStr1=0;
// while ((tempStr1=i.read()) != -1) {
// System.out.print((char)tempStr1);
// }
// i.close();
// 使用FileInputStream
File file = new File("E://test.txt");
FileInputStream in = new FileInputStream(file);
int tempStr2 = 0;
System.out.println("FileInputStream s");
while ((tempStr2 = in.read()) != -1) {
System.out.print((char) tempStr2);
}
in.close();
System.out.println();
System.out.println("FileInputStream e");
BufferedInputStream bu = new BufferedInputStream(new FileInputStream(file));
int tempStr3 = 0;
System.out.println("BufferedInputStream s");
while ((tempStr3 = bu.read()) != -1) {
System.out.print((char) tempStr3);
}
bu.close();
System.out.println();
System.out.println("BufferedInputStream e");
}
}
2、输出流
OutputStream(输出流-抽象类)->FileOutputStream(文件输出流)
->BufferedOutputStream(缓存输出流-效率高)
主要由以上三个类组成,基本操作如下:
package com.ass.io;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileOutputOpt {
public static void main(String args[]) throws IOException {
OutputStream out=null;
// out=new FileOutputStream(new File("E://test.txt")); // 使用FileOutputStream
out=new BufferedOutputStream(new FileOutputStream(new File("E://test.txt"))); //使用BufferedOutputStream
out.write("test".getBytes());
out.write("\r\n".getBytes());
out.write("test1".getBytes());
}
}
(二)、通过字符流对文件内容进行操作
(1)、输入流
Reader(字符流-抽象类)->FileReader(文件字符流)
->BufferedReader(缓存字符流)
->LineNumberReader(缓存字符流->可获取行号)
主要由以上4个类构成,具体操作如下:
package com.ass.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class FileInputCharOpt {
public static void main(String args[]) {
// 使用FileReader
try {
FileReader fileReader = new FileReader(new File("E://test.txt"));
int read;
System.out.println("FileReader s:");
while ((read = fileReader.read()) != -1) {
System.out.print((char) read);
}
System.out.println();
System.out.println("FileReader e:");
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
// 使用BufferedReader
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("E://test.txt")));
System.out.println("BufferedReader s:");
String strTemp = "";
while ((strTemp = bufferedReader.readLine()) != null) {
System.out.println(strTemp);
}
System.out.println("BufferedReader e:");
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
// 使用LineNumberReader,有获取行号的方法
try {
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(new File("E://test.txt")));
System.out.println("LineNumberReader s:");
String strTemp = "";
while ((strTemp = lineNumberReader.readLine()) != null) {
System.out.println("内容:" + strTemp);
System.out.println("行号:" + lineNumberReader.getLineNumber());
}
System.out.println("LineNumberReader e:");
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
// 使用读取器InputStreamReader,可将输入流转换为读取器(注:目前没有遇到在哪可以用这种情况)
try {
LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(System.in));
System.out.println("LineNumberReader s:");
String strTemp = "";
while ((strTemp = lineNumberReader.readLine()) != null) {
System.out.println("内容:" + strTemp);
System.out.println("行号:" + lineNumberReader.getLineNumber());
}
System.out.println("LineNumberReader e:");
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)、输出流
Writer(字符流-抽象类)->FileWriter(文件字符流流)
->BufferedWriter(缓存字符流)
主要由以上两个类构成,具体操作如下:
package com.ass.io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileOutputCharOpt {
public static void main(String[] args) {
// 使用FileWriter操作文件
try {
FileWriter fileWriter = new FileWriter(new File("E://test.txt"));
fileWriter.write("test");
fileWriter.write("\r\n");
fileWriter.write("test1");
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
// 使用BufferedWriter操作文件
try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("E://test.txt")));
bufferedWriter.write("test");
bufferedWriter.newLine();
bufferedWriter.write("test1");
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(三)、随机访问文件(RandomAccessFile)
该类可以对进行随机的读写操作,操作方法可查看API文档,注意其构造方法传参:
**构造方法中mode传r代表读,rw代表写,具体可看源码**
(四)、标准输出:
PrintStream(处理字节强)
PrintWirter(处理字符强)
具体操作方法可查看API文档,这儿就不一一介绍。
后记:主要为了方便以后使用,本文如果有不正确之处请多多指教。