Java 文件IO流
相对路径:
windows系统中一般用反斜杠 \ 来表示路径。两个反斜杠 \\是因为需要转义。
相对路径是相对于项目根目录的路径,例如项目名称为programme,里面有src文件,src文件里有java1包,那么相对路径和绝对路径的对应关系如下:
绝对路径 d:\\project\\programme\\a.txt
相对路径 a.txt
绝对路径 d:\\project\\programme\\src\\java1\\a.txt
相对路径 src\\a.txt
FileOutputStream
字节流输出,常见构造器有三种:
FileOutputStream fos = new FileOutputStream(new File("a.txt"));
FileOutputStream fos = new FileOutputStream("a.txt");
//直接在文件已有内容之后写入,不会覆盖原文件。
FileOutputStream fos = new FileOutputStream("a.txt", true);
如果a.txt文件不存在,那么会自动新建一个a.txt文件。
FileOutputStream常见方法:
close()
write(int b)
write(byte[] b)
举个例子:
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(98);
fos.close();
}
}
在a.txt中输出了一个b,为什么是一个b呢,因为字节流会把十进制的数字转换成二进制(一个字节),通过ASCII转换成字符存入文件中。如果要输出多个字节,可以用byte数组作为参数。
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
String s = "abc";
byte[] b = s.getBytes(); //byte[] b = {97, 98, 99};
fos.write(b);
fos.close();
}
}
输出abc。需要注意的是,如果写入的是正数0~127,那么会根据ASCII转换为相应的字符,如果写入的是负数,会和下一个字节转换为一个汉字(GBK码)。
String类的getBytes()方法可以把一个字符串转换成字节数组。
实现换行,windows系统为\r\n,linux系统为/n,mac系统为/r。
fos.write("\r\n".getBytes());
FileInputStream
字节流输入,常见构造器:
FileOutputStream fos = new FileOutputStream(new File("a.txt"));
FileOutputStream fos = new FileOutputStream("a.txt");
FileInputStream常见方法:
close()
flush()
read() //返回下一个数据字节;如果已到达文件末尾,则返回-1。
read(byte[] b) //读到字节存储在字节数组中,起缓冲作用
//返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
举个例子:(a.txt的内容为abc)
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
int i = 0;
while((i = fis.read()) != -1) {
System.out.print((char)i);
}
}
fis.close();
}
输出abc。如果想要读取多个字节,可以使用byte数组储存。
import java.io.*;
import java.util.Arrays;
public class {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
byte[] b = new byte[3];
fis.read(b);
System.out.println(Arrays.toString(b));
}
fis.close();
}
输出[49, 50, 51]。
FileReader和FileWriter
字符流输入输出。用法和FileInputStream,FileOutputStream差不多。
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("a.txt");
char[] c = new char[3];
fr.read(c);
System.out.println(new String(c));
}
fr.close();
}
String的构造器可以把char数组和byte数组转换成字符串(如上例所示)。
FileWriter的write()方法,会把字符写入到缓冲区,字符转换为字节存储到文件中。需要调用flush()或者close(),才能把缓冲区的数据存入文件。
上一篇: java IO流,文件
下一篇: Java IO 文件流