代码改变世界

java IO操作

2015-09-07 21:40  himanxu  阅读(203)  评论(0编辑  收藏  举报

java7中引入自动资源管理(ARM),使用try(){}catch{}finally{},()中的资源会在程序运行后自动释放。

 

文件流分为输入流和输出流,典型用法

FileReader fr = new FileReader("poem.txt");           //读取已有文件
FileWriter fw = new FileWriter("newPoem2.txt");   //向特定名文件写入(不存在先创建),覆盖
      
char[] cbuf = new char[32];                   //Reader和Writer读写以字符为单位
int hasRead = 0;              //返回一次读取数         
while ((hasRead = fr.read(cbuf)) > 0)
{
    fw.write(cbuf,0,hasRead);
}

FileInputStream fis = new FileInputStream("poem.txt");
FileOutputStream fos = new FileOutputStream("newPoem.txt"))
byte[] bbuf = new byte[32];                //InputStream和OutputStream读写以字节为单位
int hasRead = 0;
while ((hasRead = fis.read(bbuf)) > 0)
{
   fos.write(bbuf,0,hasRead);

}

 

java建议称,处理流PrintWriter功能比较强大,建议将输出流包装成PrintStream后进行输出,类似的将Writer包装成PrintWriter

FileInputStream fis = new FileInputStream("poem.txt");
FileOutputStream fos = new FileOutputStream("test.txt");
PrintStream ps = new PrintStream(fos);
FileReader fr = new FileReader("poem.txt");
FileWriter fw = new FileWriter("text.java");  

PrintWriter pw = new PrintWriter(fw)
char[] cbuf = new char[32];
byte[] bbuf = new byte[32];
int hasRead = 0;

while ((hasRead = fis.read(bbuf))>0)
{
    ps.write(bbuf,0,hasRead);
}
while ((hasRead = fr.read(cbuf)) > 0)
{
     pw.write(cbuf,0,hasRead);
}

 

PrintStream、PrintWriter、BufferedReader

PrintStream用于处理字节流,PrintWriter用于处理字符流

其中bufferedReader的readLine()方法在读取数据时,在该方法成功返回之前,线程将一直阻塞,考虑到这个原因,当要实现多个文件并发读取时,应为每个读取过程启动一个线程