读写文件内容

来源:互联网 发布:mac怎样隐藏桌面图标 编辑:程序博客网 时间:2024/05/29 07:19

 

 

 

public class IOStreamDemo {public static void main(String[] args) {try {BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\file_out.txt"));BufferedReader bufferedReader = new BufferedReader(new FileReader("c:\\hb.log"));String tempStr;while((tempStr = bufferedReader.readLine()) != null){System.out.println(tempStr);bufferedWriter.write(tempStr);}bufferedReader.close();//数据先是放到缓冲区中的,然后再写入文件,因此一定要用flush()方法,否则在文件中没有数据显示bufferedWriter.flush();bufferedWriter.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

与JDBC编程一样,程序里打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显示关闭IO资源

 

使用java的IO流执行输出时,不要忘记关闭输出流,关闭输出流除了可以保证流的物理资源被回收之外,可能还可以将输出流缓冲区中的数据flush到物理节点(因为在执行close()方法之前,自动回执行输出流的flush()方法)

 

 

转换流

InputStreamReader : 将字节输入流转换成字符输入流

OutputStreamWriter : 将字节输出流转换成字符输出流

 

怎么没有把字符流转换成字节流?

字节流比字符流的使用更广泛,但是字符流比字节流操作更方便。如果有一个流已经是字符流了,也就是说,一个用起来更方便的流,为什么要转换成字节流呢?反之,如果现在有一个字节流,但我们知道这个字节流的内容都是文本内容,那么把它转换成字符流来处理会更方便一些,所以java只提供了将字节流转换成字符流的类。

public class ReadOfficeDoc {/* * 不能直接获取doc文档中的数据,获取的全部是乱码 */public static void main(String[] args) {FileInputStream fis;try {fis = new FileInputStream("c:\\HUAWEI统一WebUI接口说明书.doc");BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis));String str;while((str = bufferedReader.readLine()) != null){System.out.println(str);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

 

Java使用System.in代表标准输入,即键盘输入,但这个标准输入时InputStream类的实例,使用不太方便,而且键盘输入内容都是文本内容,所以可以使用InputSteamReader将其转换成字符流,普通的Reader读取输入内容时依然不太方便,我们可以将普通的Reader再次包装成BufferedReader,利用BufferedReader的readLine()方法可以一次读取一行内容。

 

package hb.io;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class KeyInTest {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedReader br = new BufferedReader(new InputStreamReader(System.in));String buffer = null;while((buffer = br.readLine()) != null){if(buffer.equals("exit")){break;}else{System.out.println(buffer);}}}}

 

使用命令编译

javac KeyInTest.java

java KeyInTest

 

备注:BufferedReader具有一个readLine()方法,可以非常方便地一次读取一行内容,所以经常把读取文本内容的输入流包装成BufferedReader,用来方便的读取输入的文本内容

 

由于PrintStream类的输出功能非常强大,通常如果我们需要输出文本内容,都应该将输出流包装成PrintStream后进行输出。

System.out的类型就是PrintStream.

package hb.io;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;public class PrintStreamTest {public static void main(String[] args) {try {FileOutputStream fos = new FileOutputStream("c:\\hb.txt");PrintStream ps = new PrintStream(fos);ps.println("hello");ps.print(new PrintStreamTest());ps.close();fos.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{}}}

 

原创粉丝点击