java读文件

java.io.*;java

public abstract class Reader implements Readable,Closeable{}数组

    public class BufferedReader extends Reader{ide

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

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

}this

public class InputStreamReader extends Reader{编码

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

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

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

    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);}  

相关文章
相关标签/搜索