------------siwuxie095
工程名:ReadWriteTextFile
包名:com.siwuxie095.rwfile
类名:ReadWriteFile.java
手动在工程上创建文件:
在工程名:ReadWriteTextFile 上,右键->New->Untitled Text File,
输入一首唐诗,保存路径选择 ReadWriteTextFile,命名为 text.txt
工程结构目录如下:
text.txt 的内容:
代码:
package com.siwuxie095.rwfile;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException;
/** * 文件的读取: * 首先创建一个文件的输入流,再创建一个文件输入流的Reader, * 然后再创建一个带有缓冲的输入Reader(也是一个输入流) * * 文件的写出:和文件读取的3个流相对应 * 文件的输出流,带有Writer的输出流, 带有缓冲的输出Writer * * @author siwux * */
public class ReadWriteFile {
public static void main(String[] args) {
//文件的读取 File file=new File("text.txt");
if (file.exists()) { System.err.println("exist");
try {
//要读取文件内容,首先要创建一个文件输入流 FileInputStream (字节流) //同时创建文件输入流对象,并赋值,有两个常用构造方法 //第一个传入文件,作为要读取的文件对象,第二个传入字符串,来指定当前文件的路径 //这里使用第一个构造方法,同时有异常的抛出 //使用 try catch 语句捕获:Surround with try/catch FileInputStream fis=new FileInputStream(file);
try {
//获取文件输入流之后,需要将其包装成一个 InputStreamReader (字符流) //使用构造方法:传入输入流 InputStream:fis //同时指定一个String类型的字符集 CharsetName:"UTF-8" //(在字符和字节之间转换时必须要指定文本的编码,否则可能会出现乱码) //同样会有异常抛出,添加到 try catch 语句中:Surround with try/catch InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
//创建InputStreamReader之后,需要再创建一个带有缓冲区的Reader:BufferedReader //并指定一个新的实例,传入Reader:isr br可以直接读取一行数据 BufferedReader br=new BufferedReader(isr);
//用于文件输入的三个流准备完毕,再创建一个 String 用来临时存放读取到的一行数据 String line; //while循环,让 line 等于读取到的一行数据(BufferedReader可以直接读取一行数据) while ((line=br.readLine())!=null) { //不为空,就输出一行数据 System.out.println(line); }
//读取完毕 //关闭输入流 关闭的顺序是:先打开的后关闭,后打开的先关闭 //br.readLine() br.close() isr.close() fis.close() 都会有异常的抛出 //同样添加到try catch中 //在br.readLine()处:Add catch clause to surrounding try br.close(); isr.close(); fis.close();
} catch (UnsupportedEncodingException e) { //InputStreamReader 的 catch e.printStackTrace(); } catch (IOException e) { //br.readLine() br.close() isr.close() fis.close() 的 catch e.printStackTrace(); } } catch (FileNotFoundException e) { // FileInputStream 的 catch e.printStackTrace(); } }
//文件的写出 try {
//会有异常抛出,将下面这段代码选中,右键->Surround With(Alt+Shift+Z)->Try/catch Block File newfile=new File("newtext.txt"); //创建文件输出流(字节流) FileOutputStream fos=new FileOutputStream(newfile); //创建一个文件输出流的Writer(字符流) OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8"); //创建一个带有缓冲区的Writer BufferedWriter bw=new BufferedWriter(osw);
//三个输出流准备完成后,如果文件不存在,不必专门把文件创建出来 //因为在使用 FileOutputStream 时,如果该文件不存在,文件输出流会自动把该文件创建出来
//向文件中写出数据 使用 BufferedWriter 的 write() 方法 加入 换行 //bw.write() 同样会有异常抛出 //需要用 try catch 语句捕获:Add catch clause to surrounding try //BufferedWriter 的 write() 方法 有覆盖性:每一次写都是将之前的文件覆盖 bw.write(" 静夜思 "); bw.write("床前明月光, "); bw.write("疑是地上霜。 "); bw.write("举头望明月, "); bw.write("低头思故乡。 ");
//写出完毕 //关闭输出流 关闭的顺序是:先打开的后关闭,后打开的先关闭 bw.close(); osw.close(); fos.close(); System.out.println("写入完成");
} catch (FileNotFoundException e) { //FileOutputStream 的 catch e.printStackTrace(); } catch (UnsupportedEncodingException e) { //OutputStreamWriter 的 catch e.printStackTrace(); } catch (IOException e) { //bw.write() bw.close() osw.close() fos.close() 的 catch e.printStackTrace(); } }
} |
运行一览:
此时的工程结构目录(需要手动刷新):
newtext.txt 的内容:
【made by siwuxie095】