`
emily2ly
  • 浏览: 166643 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA 读取文件的几个相关类

阅读更多

一 介绍

最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类。
java.io下面有两个抽象类:InputStream和Reader
InputStream是表示字节输入流的所有类的超类
Reader是用于读取字符流的抽象类
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明


InputStream
   | __FileInputStream

FileInputStream 从文件系统中的某个文件中获得输入字节。
构造方法摘要
FileInputStream (File  file)
          通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream (FileDescriptor  fdObj)
          通过使用文件描述符 fdObj 创建一个 FileInputStream ,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream (String  name)
          通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的路径名 name 指定。


Reader
   |——BufferedReader
   |___InputStreamReader
         |__FileReader

BufferedReader : 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
构造方法摘要
BufferedReader (Reader  in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader (Reader  in, int sz)
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。
BufferedReader (Java Platform SE 6)
BufferedReader 的最大特点就是缓冲区的设置 ;通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
使用BufferedReader可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。


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

构造方法摘要
InputStreamReader (InputStream  in)
          创建一个使用默认字符集的 InputStreamReader。
InputStreamReader (InputStream  in, Charset  cs)
          创建使用给定字符集的 InputStreamReader。
InputStreamReader (InputStream  in, CharsetDecoder  dec)
          创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader (InputStream  in, String  charsetName)
          创建使用指定字符集的 InputStreamReader。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
InputStreamReader最大的特点是可以指转换的定编码格式
,这是其他类所不能的,从构造方法就可看出,
这一点在读取中文字符时非常有用

FileReader
1)FileReader类介绍:
InputStreamReader类的子类,所有方法(read()等)都从父类InputStreamReader中继承而来;
2)与InputStreamReader类的区别:
构造方法摘要
FileReader (File  file)
          在给定从中读取数据的 File 的情况下创建一个新 FileReader 。
FileReader (FileDescriptor  fd)
          在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader 。
FileReader (String  fileName)
          在给定从中读取数据的文件名的情况下创建一个新 FileReader

该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数!
从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,
当要指定编码方式时,必须使用InputStreamReader
类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader;
我想FileReader子类的作用也就在于这个小分工吧。该类与它的父类InputStreamReader
的主要不同在于构造函数,主要区别也就在于构造函数!
从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,
当要指定编码方式时,必须使用InputStreamReader类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader;我想FileReader子类的作用也就在于这个小分工吧。


二 联系与区别
(1)字符与字节:
FileInputStream 类以二进制输入/输出,I/O速度快且效率搞,但是它的read()方法读到的是一个字节(二进制数据),很不利于人们阅读,而且无法直接对文件中的字符进行操作,比如替换,查找(必须以字节形式操作);
而Reader类弥补了这个缺陷,可以以文本格式输入/输出,非常方便;比如可以使用while((ch = filereader.read())!=-1 )循环来读取文件;可以使用BufferedReader的readLine()方法一行一行的读取文本。
(2)编码
InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。
FileReader与InputStreamReader 涉及编码转换(指定编码方式或者采用os默认编码),可能在不同的平台上出现乱码现象!而FileInputStream 以二进制方式处理,不会出现乱码现象.
因此要指定编码方式时,必须使用InputStreamReader 类,所以说它是字节转换为字符的桥梁;
(3) 缓存区
    BufferReader类用来包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader)。
(4)规范用法
总结以上内容,得出比较好的规范用法:
1) File file = new File ("hello.txt");
FileInputStream in=new FileInputStream (file);
2) File file = new File ("hello.txt");
FileInputStream in=new FileInputStream (file);
InputStreamReader inReader=new InputStreamReader (in,"UTF-8");
BufferedReader bufReader=new BufferedReader(inReader);
3) File file = new File ("hello.txt");
FileReader fileReader=new FileReader(file);
BufferedReader bufReader=new BufferedReader(fileReader);[size=x-large]
[/size][size=large][/size]

 

(完)

create@2009-08-15

  • 大小: 12.7 KB
分享到:
评论

相关推荐

    java如何读取文件

    首先,代码导入了`java.io`包下的几个类:`BufferedReader`、`File`、`FileReader`、`FileNotFoundException`和`IOException`。这些类是读取文件所必需的。 #### 2. 创建`File`对象 代码中创建了一个`File`对象,...

    使用Java实现对dbf文件的简单读写

    使用 Java 实现对 dbf 文件的简单读写需要使用以下几个类: 1. DBFWriter:用于 dbf 文件的写操作,提供了写入 dbf 文件的方法。 2. JDBField:用于表示 dbf 文件中的字段信息,包括字段名、字段类型、字段长度等。...

    JAVA读取文件——以行为单位读取

    首先,我们需要了解Java中的几个关键类,它们在文件读取过程中扮演着重要角色: 1. `File` 类:代表文件或目录的路径名。可以创建、重命名或检查文件是否存在。 2. `BufferedReader` 类:用于读取字符流,通常与`...

    JAVA读取指定文件里面的指定内容

    通过上述分析,我们不仅了解了如何使用Java读取指定文件中的指定内容,还深入了解了Java文件操作的基本流程、相关类库及方法的应用。这种方法不仅适用于简单的文本文件读取,还可以扩展到更复杂的文件处理场景中。...

    java远程传输文件

    标签列出了与本文相关的几个关键词:远程传输、ftpclient、java和上传,这些词语都是与文件传输相关的关键词。 四、部分内容: 主要知识点: 1. 文件传送客户端:获取远程文件 代码中定义了一个download类,用于...

    java读取excel文件jar包20181223

    这个名为"java读取excel文件jar包20181223"的资源可能包含了一些帮助Java开发者实现这一功能的库。下面将详细讨论Java与Excel交互的相关知识点。 1. **Apache POI**: Apache POI 是一个开源项目,提供了处理...

    java读取文件大全

    根据给定的文件标题、描述、标签以及部分内容,我们可以总结并深入探讨关于Java读取文件的相关知识点。在Java中,读取文件是一项基础且重要的功能,适用于多种应用场景,包括但不限于数据处理、日志记录、配置读取等...

    java读写properties文件,解决系统找不到指定路径,解决写入后读取正常,但文件数据未更新问题

    总结一下,处理Java中的Properties文件读写时,需要注意文件路径的准确性、文件的读写权限以及缓存问题。通过以上方法,应该能够有效解决描述中提到的问题。对于提供的"新建文本文档.txt",虽然不是Properties文件,...

    用java读DXF文件.rar_dxf文件读取_java CADLib_java dxf_java 读取dxf_java读取DX

    文件分为几个主要部分,包括标题、图层、实体定义和实体数据。 2. **Java CAD库**:在Java中处理DXF文件通常需要借助第三方库,例如`CADLib`。CADLib是一个强大的Java库,能够解析和创建DXF和DWG文件,提供了丰富的...

    Java远程读取XML文件相关

    ### Java远程读取XML文件及SOAP协议应用 #### 核心知识点概述 本文将深入探讨如何在Java中处理XML文件,特别是聚焦于远程读取XML文件的方法与实践,并结合SOAP协议进行具体阐述。 #### 一、Java处理XML文件的基础...

    读取文件夹中所有文件中的内容

    ### 读取文件夹中所有文件中的内容 #### 背景介绍 在日常的软件开发工作中,我们经常需要处理大量的文件...此外,还介绍了Java中与文件操作相关的几个核心类及其用法,这对于理解和掌握Java文件操作是非常有帮助的。

    Java 大文件读取排序

    在本文中,我们将探讨几个关键的技术和策略,它们对于理解和实现大文件的读取排序至关重要。 首先,了解Java中的流(Stream)机制是基础。Java I/O库提供了多种类型的流,如InputStream和OutputStream用于处理二进制...

    Java小实验:文件读取加密保存

    我们将探讨以下几个关键知识点: 1. **文件I/O操作**: - `java.io`包提供了丰富的类用于文件操作,如`File`, `BufferedReader`, `BufferedWriter`, `FileInputStream`, `FileOutputStream`等。这些类可以帮助我们...

    java post文件流的操作

    根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. Java POST 请求发送与接收文件流 在Java中,通过`HttpURLConnection`类可以轻松地实现POST请求,用于发送和接收文件流。该方法主要涉及到以下几...

    Java文件下载相关资料搜集

    Java文件下载是Web开发中的一个常见任务,涉及到服务器与客户端之间的数据传输。在这个主题中,我们主要探讨Java中实现文件下载的各种方法和技术要点。 首先,Java文件下载的基本流程包括:客户端发起请求,服务器...

    java操作sftp的工具类(JSch)

    JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们...

    用java解析DXF文件中的实体信息

    DXF文件分为几个主要部分:标题块、表格、层、视图、 UCS、块、实体和结束标记。每个实体都有自己的属性和参数,如位置、大小、颜色和线型。解析DXF文件时,我们要逐行读取文件,识别这些实体及其属性。 在Java中,...

    java zip rar(区分有无密码的RAR文件) gz ftp工具类

    本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的使用。 1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件...

    java多种读取文件方式

    本文将详细介绍几种常用的文件读取方法,并针对每种方法的特点、适用场景及示例代码进行深入解析。 #### 一、字节流读取文件 1. **逐字节读取** - **方法原理**:使用`FileInputStream`类提供的`read()`方法,...

    java读取Word文档依赖jar包

    在Java编程环境中,读取和操作Microsoft Word文档通常需要依赖外部库,Apache POI就是其中最常用的一个。Apache POI是一个开源项目,它允许开发者使用Java处理Microsoft Office格式的文件,包括Word(.doc和.docx)...

Global site tag (gtag.js) - Google Analytics