关闭

读写文件内容

230人阅读 评论(0) 收藏 举报

 

 

 

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 block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.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 block
			e.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 stub
		BufferedReader 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 block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
		}
		
	}

}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:309081次
    • 积分:8705
    • 等级:
    • 排名:第2263名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论