今天介绍文件的读取和写入,分别用FileReader,FileWriter
1,FileWriter类(字符输出流类)
构造方法:FileWriter fw = new FileWriter(String fileName);//创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。
如:FileWriter fw = new FileWriter("C:\\demo.txt");
FileWriter fw = new FileWriter(String fileName,boolean append);//创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写。
如:FileWriter fw = new FileWriter("C:\\demo.txt",ture); //表示在fw对文件再次写入时,会在该文件的结尾续写,并不会覆盖掉。
主要方法: void write(String str) //写入字符串。当执行完此方法后,字符数据还并没有写入到目的文件中去。此时字符数据会保存在缓冲区中。
此时在使用刷新方法就可以使数据保存到目的文件中去。
viod flush() //刷新该流中的缓冲。将缓冲区中的字符数据保存到目的文件中去。
viod close() //关闭此流。在关闭前会先刷新此流的缓冲区。在关闭后,再写入或者刷新的话,会抛IOException异常。
package filewriter; import java.io.FileWriter;
import java.io.IOException; public class Filewriter { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); /**
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/**
* 创建一个可以往文件中写入字符数据的字符流输出流对象
* 创建时必须明确文件的目的地
* 如果文件不存在,这回自动创建。如果文件存在,则会覆盖。
* 当路径错误时会抛异常
*
* 当在创建时加入true参数,回实现对文件的续写。
*/
FileWriter fw = new FileWriter("C:\\demo1.txt",false);
/**
* 调用该对象的write方法,向文件写入字符。
*
* 其实写入到了临时存储缓冲区中
*/
// fw.write("hello \r\nworld!");//windows中的换行为\r\n unix下为\r。
fw.write("aello"+LINE_SEPARATOR+"world!");
fw.write("hahaha");
/**
* 进行刷新,将字符写到目的地中。
*/
// fw.flush();
/**
* 关闭流,关闭资源。在关闭前会调用flush方法 刷新缓冲区。关闭后在写的话,会抛IOException
*/
fw.close(); } }
2,FileReader类
1,构造方法
FileReader fr = new FileReader(String fileName);//使用带有指定文件的String参数的构造方法。创建该输入流对象。并关联源文件。
2,主要方法
int read(); // 读取单个字符。返回作为整数读取的字符,如果已达到流末尾,则返回 -1。
int read(char []cbuf);//将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。
void close();//关闭此流对象。释放与之关联的所有资源。
package Filereader; import java.io.FileReader;
import java.io.IOException; public class FileReaderDemo { public static void main(String[] args) throws IOException {
/**
* 创建读取字符数据的流对象。
* 读取路径不正确时会抛 IOException
* 用以个读取流对象关联一个已存在文件。
*/
FileReader fr = new FileReader("demo.txt");
/**
* 用Reader中的read方法读取字符。
*/
/*int ch = fr.read();
System.out.print((char)ch);
int ch1 = fr.read();
System.out.print((char)ch1);
int ch2 = fr.read();
System.out.print((char)ch2);*/
int ch = ;
while((ch = fr.read()) != -){//读取所有内容
System.out.print((char)ch);
}
fr.close();
}
}
BufferedWriter 和 BufferedReader的介绍
BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以很效率比没有缓冲区的很高。
一、BufferedWriter 类
package Buffered; import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("Buffered.txt");
// fw.write("ok168");
// fw.close();
/**
* 为了提高写入的效率,使用了字符流的缓冲区。
* 创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联。
*/
BufferedWriter bufw = new BufferedWriter(fw); //使用缓冲区中的方法将数据写入到缓冲区中。
bufw.write("hello world !");
bufw.newLine();
bufw.newLine();
bufw.write("!hello world !");
bufw.write("!hello world !");
//使用缓冲区中的方法,将数据刷新到目的地文件中去。
bufw.flush();
//关闭缓冲区,同时关闭了fw流对象
bufw.close();
}
}
二、BufferedReader类。
package Buffered; import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("Buffered.txt");
// fw.write("ok168");
// fw.close();
/**
* 为了提高写入的效率,使用了字符流的缓冲区。
* 创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联。
*/
BufferedWriter bufw = new BufferedWriter(fw); //使用缓冲区中的方法将数据写入到缓冲区中。
bufw.write("hello world !");
bufw.newLine();
bufw.newLine();
bufw.write("!hello world !");
bufw.write("!hello world !");
//使用缓冲区中的方法,将数据刷新到目的地文件中去。
bufw.flush();
//关闭缓冲区,同时关闭了fw流对象
bufw.close();
}
}
FileInputStream和FileOutputStream用法的简介
前面提到过FileReader、FileWriter以字符流的形式读写数据,现在来说说以字节流的形式操作数据
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class FInputStream { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileInputStream fis=new FileInputStream(new File("D:\\123.txt"));//新建一个FileInputStream对象
try {
byte[] b=new byte[fis.available()];//新建一个字节数组
fis.read(b);//将文件中的内容读取到字节数组中
fis.close();
String str2=new String(b);//再将字节数组中的内容转化成字符串形式输出
System.out.println(str2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}