使用Java操作文本文件的方法详解
摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类
最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中 write(char[] ch,int off,int
摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类
最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中 write(char[] ch,int off,int
length),flush()和close()方法为抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子类应该分别实现他们。
当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader,
它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。当使用FileReader读取文件
的时候。
- FileReader fr = new FileReader( "ming.txt" );
- int ch = 0 ;
- while ((ch = fr.read())!=- 1 )
- {
- System.out.print(( char )ch);
- }
其中read()方法返回的是读取得下个字符。当然你也可以使用read(char[] ch,int off,int length)这和处理二进制文件的时候类似,不多说了。如果使用
InputStreamReader来读取文件的时候
while((ch = isr.read())!=-1)
{
System.out.print((char)ch);
}
这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。read()方法是比较好费时间的,如果为了提高效率
{
System.out.print((char)ch);
}
这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。read()方法是比较好费时间的,如果为了提高效率
我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用readLine()方法。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先
放入缓冲区,然后写入文件。因此有时候你需要主动调用flush()方法。与上面对应的写文件的方法为:
- FileWriter fw = new FileWriter( "hello.txt" );
- String s = "hello world" ;
- fw.write(s, 0 ,s.length());
- fw.flush();
- OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream( "hello2.txt" ));
- osw.write(s, 0 ,s.length());
- osw.flush();
- PrintWriter pw = new PrintWriter( new OutputStreamWriter( new FileOutputStream( "hello3.txt" )), true );
- pw.println(s);
不要忘记用完后关闭流!下面是个小例子,帮助新手理解。其实有的时候java的IO系统是需要我们多记记的,不然哪天就生疏了。
- import java.io.*;
- public class TestFile2
- {
- public static void main(String[] args) throws IOException
- {
- FileReader fr = new FileReader( "ming.txt" );
- char [] buffer = new char [ 1024 ];
- int ch = 0 ;
- while ((ch = fr.read())!=- 1 )
- {
- System.out.print(( char )ch);
- }
- InputStreamReader isr = new InputStreamReader( new FileInputStream( "ming.txt" ));
- while ((ch = isr.read())!=- 1 )
- {
- System.out.print(( char )ch);
- }
- BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( "ming.txt" )));
- String data = null ;
- while ((data = br.readLine())!= null )
- {
- System.out.println(data);
- }
- FileWriter fw = new FileWriter( "hello.txt" );
- String s = "hello world" ;
- fw.write(s, 0 ,s.length());
- fw.flush();
- OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream( "hello2.txt" ));
- osw.write(s, 0 ,s.length());
- osw.flush();
- PrintWriter pw = new PrintWriter( new OutputStreamWriter( new FileOutputStream( "hello3.txt" )), true );
- pw.println(s);
- fr.close();
- isr.close();
- br.close();
- fw.close();
- osw.close();
- pw.close();
- }
- }
java中多种方式读文件
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.RandomAccessFile;
- import java.io.Reader;
- public class ReadFromFile {
- /**
- * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
- * @param fileName 文件的名
- */
- public static void readFileByBytes(String fileName){
- File file = new File(fileName);
- InputStream in = null ;
- try {
- System.out.println( "以字节为单位读取文件内容,一次读一个字节:" );
- // 一次读一个字节
- in = new FileInputStream(file);
- int tempbyte;
- while ((tempbyte=in.read()) != - 1 ){
- System.out.write(tempbyte);
- }
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- return ;
- }
- try {
- System.out.println( "以字节为单位读取文件内容,一次读多个字节:" );
- //一次读多个字节
- byte [] tempbytes = new byte [ 100 ];
- int byteread = 0 ;
- in = new FileInputStream(fileName);
- ReadFromFile.showAvailableBytes(in);
- //读入多个字节到字节数组中,byteread为一次读入的字节数
- while ((byteread = in.read(tempbytes)) != - 1 ){
- System.out.write(tempbytes, 0 , byteread);
- }
- } catch (Exception e1) {
- e1.printStackTrace();
- } finally {
- if (in != null ){
- try {
- in.close();
- } catch (IOException e1) {
- margin: 0px; border-left: #6ce26c 3px sol
发表评论
- 浏览: 4653 次
- 性别:
- 来自: 秦皇岛
最近访客 更多访客>>
最新评论
-
niweiwei
: 能不能整一个完整的代码上了,看着太费劲了
JasperReport导出各种格式rtf,xls,pdf等
评论