唯倚社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 277|回复: 5

java读文件

[复制链接]

59

主题

169

帖子

754

积分

版主

Rank: 7Rank: 7Rank: 7

积分
754
发表于 2017-9-13 23:11:39 | 显示全部楼层 |阅读模式

轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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是表示字节输入流的所有类的超类。
我们都知道计算机能识别的只有0和1,数据是以字节为单位存储的。
   a.故在java中,我们若想要从文件中读取一个字符,首先我们需要有一个文件(数据源),于是我们就使用到了File类来制定一个文件;
   b. 因为数据在计算机中都是0和1代码,以字节为单位,所以我们所指定的file对象就需要先转化成字节流,所以需要用到InputStream类;
   c. 这时候,如果在java中只是以字节来读取文件的话,就足够了。但是如果想要以字符来读取文件的话,还需要对字节流进行以某种方式编码,因为不同的字符采用不同的编码方式,如果仍然使用字节流的话,可能会达不到我们想要的效果。我们可以指定字符编码方式,这个通过在InputStreamReader相关类的构造器中指定并实例化,默认下是Unicode编码方式。到了这里,我们已经用到了InputStreamReader。
   d. 经过了上面三个步骤,我们已经可以从文件中读取到一个字符了,但是每次只读取一个字符又不能满足我们读取大数据的需求,这时候BufferedReader就派上用场了。从名字中的Buffer我们可以推测出它具有缓冲的作用,事实也是如此,它可以一次读取多个字符,一次性读取的字符数目还可以自由设置。

用法:
[Java] 纯文本查看 复制代码
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);}  

1

主题

100

帖子

79

积分

版主

Rank: 7Rank: 7Rank: 7

积分
79
发表于 2017-9-23 20:18:30 | 显示全部楼层
不怕神一样的对手,就怕猪一样的队友
回复

使用道具 举报

59

主题

169

帖子

754

积分

版主

Rank: 7Rank: 7Rank: 7

积分
754
 楼主| 发表于 2017-9-23 20:20:56 | 显示全部楼层
高大上
回复

使用道具 举报

33

主题

160

帖子

434

积分

版主

Rank: 7Rank: 7Rank: 7

积分
434
发表于 2017-9-23 21:09:04 | 显示全部楼层
有钱就是大爷,欠钱不还的更是
回复

使用道具 举报

0

主题

108

帖子

249

积分

版主

Rank: 7Rank: 7Rank: 7

积分
249
发表于 2017-9-23 21:13:57 | 显示全部楼层
为何要放弃治疗
回复

使用道具 举报

19

主题

128

帖子

1065

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1065

最佳新人

发表于 2017-9-24 10:13:55 | 显示全部楼层
很黄很暴力
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|weiecn ( 湘ICP备14002058号 )

GMT+8, 2018-10-23 09:06 , Processed in 0.069914 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表