码迷,mamicode.com
首页 > 编程语言 > 详细

java读文件

时间:2017-09-12 23:20:57      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:reader   buffered   inputstream   

java.io.*;

public abstract class Reader implements Readable,Closeable{}

    public class BufferedReader extends Reader{

        public BufferedReader(Reader in);创建一个使用默认大小输入缓冲区的缓冲字符输入流。

        public BufferedReader(Reader in, int sz);创建一个使用指定大小输入缓冲区的缓冲字符输入流。

}

public class InputStreamReader extends Reader{

    public InputStreamReader(InputStream in);创建一个使用默认字符集的 InputStreamReader

    public InputStreamReader(InputStream in, StringcharsetName); 创建使用指定字符集的InputStreamReader     

    public InputStreamReader(InputStream in, Charset cs);创建使用给定字符集的 InputStreamReader

    public InputStreamReader(InputStream in, CharsetDecoderdec);创建使用给定字符集解码器的 InputStreamReader

         }

        public class FileReader extends InputStreamReader{

            public FileReader(String fileName){ super(new                 FileInputStream(fileName));}

            public FileReader(File file) {super(new FileInputStream(file));}  

            public FileReader(FileDescriptor fd) {  super(newFileInputStream(fd));             }

        }

 

public abstract classInputStream implements Closeable{}

    public class FileInputStream extends InputStream{

        public FileInputStream(String name) throws FileNotFoundException {this(name != null ? new File(name) : null); }

        public FileInputStream(File file);

        public FileInputStream(FileDescriptorfdObj);

}

         FileInputStream从文件系统中的某个文件中获得输入字节。

        

public class File implements Serializable,Comparable<File>{

   public File(String pathname);

   public File(String parent,String child);

public File(File parent, String child);

   public File(URI uri);

}

 

 

Reader是用于读取字符流的抽象类;InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。

 

BufferedReader Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader针对Reader的,不直接针对文件,也不是只针对文件读取。BufferedReader的最大特点就是缓冲区的设置。通常Reader所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用 read() readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。 使用BufferedReader可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader InputStreamReader)。例如:

 BufferedReader in = new BufferedReader(newInputStreamReader(System.in));

 

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。InputStreamReader最大的特点是可以指转换的定编码格式,这是其他类所不能的,从构造方法就可看出,这一点在读取中文字符时非常有用。

 

FileReader与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数!

                  

 

InputStream是表示字节输入流的所有类的超类。

我们都知道计算机能识别的只有01,数据是以字节为单位存储的。

   a.故在java中,我们若想要从文件中读取一个字符,首先我们需要有一个文件(数据源),于是我们就使用到了File类来制定一个文件;

   b. 因为数据在计算机中都是01代码,以字节为单位,所以我们所指定的file对象就需要先转化成字节流,所以需要用到InputStream类;

   c. 这时候,如果在java中只是以字节来读取文件的话,就足够了。但是如果想要以字符来读取文件的话,还需要对字节流进行以某种方式编码,因为不同的字符采用不同的编码方式,如果仍然使用字节流的话,可能会达不到我们想要的效果。我们可以指定字符编码方式,这个通过在InputStreamReader相关类的构造器中指定并实例化,默认下是Unicode编码方式。到了这里,我们已经用到了InputStreamReader

   d. 经过了上面三个步骤,我们已经可以从文件中读取到一个字符了,但是每次只读取一个字符又不能满足我们读取大数据的需求,这时候BufferedReader就派上用场了。从名字中的Buffer我们可以推测出它具有缓冲的作用,事实也是如此,它可以一次读取多个字符,一次性读取的字符数目还可以自由设置。

 

用法:

Filefile = newFile("E:/abc/1.txt");

1.   if(!file.exists())   

2.      {   

3.          try {   

4.               file.getParentFile().mkdir(); //如果文件夹不存在则先创建文件夹

5.              file.createNewFile();   

6.          } catch (IOException e) {   

7.              // TODO Auto-generated catch block

8.              e.printStackTrace();   

9.          }   

10.    }    

 

1FileInputStream fit = new FileInputStream(file);//以二进制方式处理,不会出现乱码现象;处理非纯文本文件;-读取出来是byte数据

InputStreamReader isr = new InputStreamReader(fit,"UTF-8");

BufferedReader br = new BufferedReader(isr);

 

//InputStreamReader读取char数据

int ch = 0;

while((ch=isr.read())!=-1){ System.out.println((char)ch); }

 

(2)FileReader fr = new FileReader(file);//处理纯文本文件,InputStreamReader的子类

 

//FileReader读取char数据

int ch = 0;

while((ch = fr.read())!=-1 ) {System.out.println((char)ch); }

        

(3)FileReader fr = new FileReader(file);

   BufferedReaderbr = newBufferedReader(fr);

 

//BufferedReader读取String数据

String ch = "";

while((ch=br.readLine())!=null){System.out.println(ch);}  


java读文件

标签:reader   buffered   inputstream   

原文地址:http://shuimomo.blog.51cto.com/1141396/1964682

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!