程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中。
1、FileInputStream与FileOutputStream类
FileInputStream类与FileOutputStream类都用来操作磁盘文件。FileInputStream是InputStream的子类,FileOutputStream是OutputStream类的子类。
FileInputStream常用的构造方法如下:
(1)FileInputStream(String name)
(2)FileInputStream(File file)
FileOutputStream类与FileInputStream类的构造方法相同,但是使用FileOutputStream创建对象时,可以指定不存在的文件名,但此文件不能是一个已被其它程序打开的文件。
示例如下:
public class FileTest {
public static void main(String args[]) {
File file = new File("word.txt");
try {
FileOutputStream out = new FileOutputStream(file);
byte buy[] = "断剑重铸之日,骑士归来之时".getBytes();
out.write(buy);
out.close();
}catch(Exception e){
e.printStackTrace();
}
try {
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024];
int len = in.read(byt);
System.out.println("文件中的信息是:"+new String(byt,0,len));
in.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
/*输出结果如下:
文件中的信息是:断剑重铸之日,骑士归来之时
*/
2、FileReader与FileWriter类
对于FileOutputStream向文件中写入数据与使用FileInputStream类从文件中将内容读出来,都有一个缺点,即这两个类都只提供了对字节或字节数组的读取方法,所以在读取汉字的时候,可能会出现乱码的现象。使用Reader或Writer类可以避免,这两个类采用字符流。
FileReader流顺序地读载文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
通过以下示例来说明FileReader和FileWriter类的用法:
public class Ftest {
public static void main(String args[]) {
String s[] = {"java", "python", "c", "c++"};
try {
FileWriter out = new FileWriter("test.txt");
BufferedWriter outBW = new BufferedWriter(out);
for (int i = 0; i < s.length; i++) {
outBW.write(s[i]);
outBW.newLine();
}
outBW.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
FileReader in = new FileReader(new File("test.txt"));
BufferedReader inBR = new BufferedReader(in);
String stext = null;
int j = 1;
while ((stext = inBR.readLine()) != null) {
System.out.println("第" + j + "行内容:" + stext);
j++;
}
inBR.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*输出结果如下:
第1行内容:java
第2行内容:python
第3行内容:c
第4行内容:c++
*/