Java: IO <一>

  FileReader是InputStreamReader的子类,InputStreamReader是Reader的子类。Reader系列是输入字符流。

1.一个字符一个字符的读取

 1 import java.io.*;
 2
 3 public class FileReaderDemo {
 4
 5     public static void main(String[] args) {
 6         FileReader fr = null;
 7         try{
 8             fr = new FileReader("FileWriterDemo.txt");
 9             int ch =0;
10             while((ch = fr.read())!=-1){
11                 System.out.print((char)ch);
12             }
13         }
14         catch(IOException e){
15             System.out.println(e.toString());
16         }
17         finally{
18             try{
19                 if(fr!=null)
20                     fr.close();
21             }
22             catch(IOException e){
23                 System.out.println(e.toString());
24             }
25
26         }
27
28     }
29
30 }

2.使用字符数组临时存储读取的字符,数组长度可以自定义

 1 import java.io.FileReader;
 2 import java.io.IOException;
 3
 4 public class FileReaderDemo2 {
 5
 6     public static void main(String[] args) {
 7         FileReader fr = null;
 8         try{
 9             fr = new FileReader("FileWriterDemo.txt");
10             //定义字符数组用于存储读到的字符
11             char[] buf = new char[1024];
12             int aLength = fr.read(buf);
13             for(int x = 0;x< aLength;x++)
14             {
15                 System.out.print(buf[x]);
16             }
17
18         }
19         catch(IOException e){
20             System.out.println(e.toString());
21         }
22         finally{
23             try{
24                 if(fr!=null)
25                     fr.close();
26             }
27             catch(IOException e){
28                 System.out.println(e.getStackTrace());
29             }
30         }
31
32     }
33
34 }

  为了提高读取效率,加入BufferedReader(Reader in)缓冲技术,该类可以使用readLine方法,一次读取一行。

 1 import java.io.*;
 2
 3 public class BufferedReaderDemo {
 4
 5     public static void main(String[] args) {
 6         //创建一个读取流对象
 7         FileReader fr = null;
 8         try{
 9             fr = new FileReader("xinwen.txt");
10             //加入缓冲技术,提高读取效率
11             BufferedReader bufr = new BufferedReader(fr);
12
13             String line = null;
14             while((line=bufr.readLine())!=null){
15                 System.out.println(line);
16             }
17             bufr.close();
18         }
19         catch(IOException e){
20             e.printStackTrace();
21         }
22         finally{
23             try{
24                 if(fr!=null)
25                     fr.close();
26             }
27             catch(IOException e){
28                 e.printStackTrace();
29             }
30         }
31     }
32 }

  FileWriter是OutputStreamWriter的子类,而OutputStreamWriter是Writer的子类。Writer系列是输出字符流。

 1 import java.io.*;
 2
 3 public class FileWriterDemo {
 4
 5     public static void main(String[] args)throws IOException {
 6         FileWriter fw = null;
 7         try {
 8             fw = new FileWriter("FileWriterDemo.txt",true);
 9             fw.write("2015");
10             fw.write("\r\n");
11             fw.write("一起努力!");
12
13             fw.flush();
14         }
15         catch(IOException e){
16             System.out.println(e.toString());
17         }
18         finally{
19             try{
20                 if(fw!=null)
21                     fw.close();
22             }
23             catch(IOException e){
24                 System.out.println(e.toString());
25             }
26         }
27     }
28
29 }

  为了提阿写入效率,使用BufferedWriter(Writer wr)缓冲技术,该类中的newLine方法可以输出一个换行符,而且是跨平台的。  

  把输入、输出结合起来,模拟复制文件。方法一,不使用缓冲技术

 1 import java.io.*;
 2
 3 public class FileCopyDemo {
 4
 5     public static void main(String[] args) {
 6
 7         //copy1();
 8         copy2();
 9     }
10     //读一个字符就存一个
11     public static void copy1(){
12     //创建目的文件
13         FileWriter fw = null;
14     //与已有文件关联
15         FileReader fr = null;
16
17         try{
18             fw = new FileWriter("/home/owen/news_copy.txt");
19             fr = new FileReader("news.txt");
20             int ch = 0;
21             while((ch=fr.read())!=-1){
22                 fw.write(ch);
23             }
24         }
25         catch(IOException e){
26             System.out.println(e.getStackTrace());
27         }
28         finally{
29             try{
30                 if(fw!=null)
31                     fw.close();
32                 if(fr!=null)
33                     fr.close();
34             }
35             catch(IOException e){
36                 System.out.println(e.getStackTrace());
37             }
38         }
39     }
40     public static void copy2(){
41         FileWriter fw = null;
42         FileReader fr = null;
43         try{
44             fw = new FileWriter("news_copy2.txt");
45             fr = new FileReader("news.txt");
46
47             char[] buf = new char[1024];
48             int len = 0;
49             while((len = fr.read(buf))!=-1){
50                 fw.write(buf,0,len);
51             }
52         }
53         catch(IOException e){
54             throw new RuntimeException("读写失败");
55         }
56         finally{
57             if(fr!=null){
58                 try{
59                     fr.close();
60                 }
61                 catch(IOException e){
62                     System.out.println(e.getStackTrace());
63                 }
64             }
65             if(fw!=null){
66                 try{
67                     fw.close();
68                 }
69                 catch(IOException e){
70                     System.out.println(e.getStackTrace());
71                 }
72             }
73         }
74     }
75
76 }

  方法二,使用缓冲技术

 1 import java.io.*;
 2
 3 public class CopyByBuffered {
 4
 5     public static void main(String[] args) {
 6         BufferedReader bufr = null;
 7         BufferedWriter bufw = null;
 8         try{
 9             bufr = new BufferedReader(new FileReader("BufferedReaderDemo.java"));
10             bufw = new BufferedWriter(new FileWriter("BufferedReaderDemo_copy.txt"));
11
12             String line = null;
13             while((line = bufr.readLine())!=null){
14                 bufw.write(line);
15                 bufw.flush();
16                 bufw.newLine();
17             }
18         }
19         catch(IOException e){
20             throw new RuntimeException("复制失败!");
21         }
22         finally{
23             try{
24                 if(bufr!=null)
25                     bufr.close();
26             }
27             catch(IOException e){
28                 throw new RuntimeException("Read file mission failed!");
29             }
30             try{
31                 if(bufw!=null)
32                     bufw.close();
33             }
34             catch(IOException e){
35                 throw new RuntimeException("Write file mission failed!");
36             }
37         }
38
39     }
40
41 }
时间: 2025-01-02 00:21:24

Java: IO <一>的相关文章

java IO之输入流——InputStream

java的基本输入流是java.io.InputStream,该抽象类定义了输入流的基本输入操作方法,实现自该抽象类的子类都有定义自己的数据源,例如ByteArrayInputStream的构造函数指定了ByteArrayInputStream输入流的数据源必须是一个字符数组.这就可以有多种不同的数据源,包括:字符数组.String对象.文件."管道".一个由其他种类的流组成的序列... 1 public ByteArrayInputStream(byte buf[]) {} 2 3

Hive报错 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

报错信息如下 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D 解决方法: 编辑 hive-site.xml 文件,添加下边的属性 <property> <name>system:java.io.tmpdir<

java.io.IOException: No space left on device 错误

今天碰到比较奇怪的问题: 7/05/14 19:20:24 INFO util.Utils: Fetching http://192.168.31.160:33039/jars/spark_study_java-0.0.1-SNAPSHOT-jar-with-dependencies.jar to /tmp/spark-446068a4-aaa4-4277-b009-908bf0d4ecac/executor-dcc3175b-7d19-4485-81e1-bf31a83a66b4/spark-

【java】io流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream

1 package 文件操作; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 8 public class TestInputStream { 9 public static void main(String[] args) throws IOException { 10 File file=new F

java io 学习

1,io 体系 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writer.Reader:一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了. Java.io包中定义了多个流类型类实现输入输出的功能,从不同的角度可以分为: ~按照数据流方向的不同可以分为输入流和输出流. ~按照按照数据处理单位的不同可以分为字节流和字符流. 如下几张图可以直观的描述io

Java IO流 探险

Java的IO流使用了一种装饰器设计模式,它将IO流分为底层节点流和上层处理流.本篇重点在如何访问文件与目录.如何以二进制格式和文本格式来读写数据.对象序列化机制.还有Java7的"NIO.2". 装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装饰的对象.并基于被装饰的对象的功能,提供更强的功能. IO的方式通常分为:BIO(同步阻塞).NIO(同步非阻塞).AIO

Play生产模式下java.io.FileNotFoundException那点事

之前”用Scala+Play构建地理数据查询接口”那篇文章里,用到的数据是json格式的文本文件area.json,存放在conf/jsons文件夹下.最开始是放在public/文件夹下,在线上准生产模式下运行: activator dist 得到mosquito-1.0.zip压缩包,解压后: 去/bin目录下运行mosquito脚本报错: java.io.FileNotFoundException 然后就去解压的mosquito-1.0/看发现并没有public文件夹,由此可见public文

keytool 错误: java.io.FileNotFoundException: 拒绝访问

keytool 错误: java.io.FileNotFoundException: 拒绝访问 打开命令行,切换到D:\AndroidStudioProjects\MyApplication\app目录 keytool 在JDK的/bin目录下,比如:/opt/jdk/bin 用以下的命令生成一个证书: keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore android.key 老是报如题的错误: 后来

Java IO详解(转)

IO是Java及众多编程语言很重要的一块,同时很多程序的瓶颈和耗时操作也都在IO这块. 一.简介 IO操作面临很多问题,信息量的巨大,网络的环境等等,因为IO不仅仅是对本地文件.目录的操作,有时对二进制流.还有一部分是网络方面的资源,所以多种原因直接造成IO操作无疑是耗时且复杂多变的.Java对IO的支持是个不断的演变过程,经过了很多的优化,直到JDK1.4以后,才趋于稳定,在JDK1.4中,加入了nio类,解决了很多性能问题,虽然我们有足够的理由不去了解关于Java IO以前的情况,但是为了学

Java IO操作:合并流

合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立两个FileInputStream实例对象,用于输出指定两个文件. 2,建立一个FileOutputStream实例,用于合并写入两个文件. 2,通过SequenceInputStream类,把两个文件的内容合并起来,放到这个类实例流中. 3,把SequenceInputStream实例的内容读取出