Java文本编辑器中遇到的问题详解

今天介绍文件的读取和写入,分别用FileReader,FileWriter

1,FileWriter类(字符输出流类)

构造方法:FileWriter fw = new FileWriter(String fileName);//创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。

如:FileWriter fw = new FileWriter("C:\\demo.txt");

FileWriter fw = new FileWriter(String fileName,boolean append);//创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写。

如:FileWriter fw = new FileWriter("C:\\demo.txt",ture); //表示在fw对文件再次写入时,会在该文件的结尾续写,并不会覆盖掉。

主要方法: void write(String str)   //写入字符串。当执行完此方法后,字符数据还并没有写入到目的文件中去。此时字符数据会保存在缓冲区中。

此时在使用刷新方法就可以使数据保存到目的文件中去。

viod flush()                //刷新该流中的缓冲。将缓冲区中的字符数据保存到目的文件中去。

viod close()               //关闭此流。在关闭前会先刷新此流的缓冲区。在关闭后,再写入或者刷新的话,会抛IOException异常。

 1 package filewriter;
 2
 3 import java.io.FileWriter;
 4 import java.io.IOException;
 5
 6 public class Filewriter {
 7
 8     private static final String LINE_SEPARATOR = System.getProperty("line.separator");
 9
10     /**
11      *
12      * @param args
13      * @throws IOException
14      */
15     public static void main(String[] args) throws IOException {
16         /**
17          * 创建一个可以往文件中写入字符数据的字符流输出流对象
18          * 创建时必须明确文件的目的地
19          * 如果文件不存在,这回自动创建。如果文件存在,则会覆盖。
20          * 当路径错误时会抛异常
21          *
22          * 当在创建时加入true参数,回实现对文件的续写。
23          */
24         FileWriter fw = new FileWriter("C:\\demo1.txt",false);
25         /**
26          * 调用该对象的write方法,向文件写入字符。
27          *
28          * 其实写入到了临时存储缓冲区中
29          */
30 //        fw.write("hello \r\nworld!");//windows中的换行为\r\n    unix下为\r。
31         fw.write("aello"+LINE_SEPARATOR+"world!");
32         fw.write("hahaha");
33         /**
34          * 进行刷新,将字符写到目的地中。
35          */
36 //        fw.flush();
37         /**
38          * 关闭流,关闭资源。在关闭前会调用flush方法 刷新缓冲区。关闭后在写的话,会抛IOException
39          */
40         fw.close();
41
42
43     }
44
45 }

2,FileReader类

1,构造方法

FileReader fr = new FileReader(String fileName);//使用带有指定文件的String参数的构造方法。创建该输入流对象。并关联源文件。

2,主要方法

int read(); // 读取单个字符。返回作为整数读取的字符,如果已达到流末尾,则返回 -1。

int read(char []cbuf);//将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。

void close();//关闭此流对象。释放与之关联的所有资源。

 1 package Filereader;
 2
 3 import java.io.FileReader;
 4 import java.io.IOException;
 5
 6 public class FileReaderDemo {
 7
 8     public static void main(String[] args) throws IOException {
 9         /**
10          * 创建读取字符数据的流对象。
11          * 读取路径不正确时会抛 IOException
12          * 用以个读取流对象关联一个已存在文件。
13          */
14         FileReader fr = new FileReader("demo.txt");
15         /**
16          * 用Reader中的read方法读取字符。
17          */
18         /*int ch = fr.read();
19         System.out.print((char)ch);
20         int ch1 = fr.read();
21         System.out.print((char)ch1);
22         int ch2 = fr.read();
23         System.out.print((char)ch2);*/
24         int ch = 0;
25         while((ch = fr.read()) != -1){//读取所有内容
26             System.out.print((char)ch);
27         }
28         fr.close();
29         }
30 }

BufferedWriter 和 BufferedReader的介绍

BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以很效率比没有缓冲区的很高。

一、BufferedWriter 类

构造方法:bufferedWriter bf = new bufferedWriter(Writer out );

主要方法:void write(char ch);//写入单个字符。

                  void write(char []cbuf,int off,int len)//写入字符数据的某一部分。

                  void write(String s,int off,int len)//写入字符串的某一部分。

                  void newLine()//写入一个行分隔符。

                  void flush();//刷新该流中的缓冲。将缓冲数据写到目的文件中去。

                  void close();//关闭此流,再关闭前会先刷新他。

 1 package Buffered;
 2
 3 import java.io.BufferedWriter;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6
 7 public class BufferedWriterDemo {
 8     public static void main(String[] args) throws IOException {
 9         FileWriter fw = new FileWriter("Buffered.txt");
10 //        fw.write("ok168");
11 //        fw.close();
12         /**
13          * 为了提高写入的效率,使用了字符流的缓冲区。
14          * 创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联。
15          */
16         BufferedWriter bufw = new BufferedWriter(fw);
17
18         //使用缓冲区中的方法将数据写入到缓冲区中。
19         bufw.write("hello world !");
20         bufw.newLine();
21         bufw.newLine();
22         bufw.write("!hello world !");
23         bufw.write("!hello world !");
24         //使用缓冲区中的方法,将数据刷新到目的地文件中去。
25         bufw.flush();
26         //关闭缓冲区,同时关闭了fw流对象
27         bufw.close();
28     }
29 }

二、BufferedReader类。

构造方法:BufferedReader br = new BufferReader(Reader in);

主要方法:int read();//读取单个字符。

                  int read(char[] cbuf,int off,int len);//将字符读入到数组的某一部分。返回读取的字符数。达到尾部 ,返回-1。

                  String readLine();                        //读取一个文本行。

                  void close();                                //关闭该流。并释放与该流相关的所有资源。

 1 package Buffered;
 2
 3 import java.io.BufferedWriter;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6
 7 public class BufferedWriterDemo {
 8     public static void main(String[] args) throws IOException {
 9         FileWriter fw = new FileWriter("Buffered.txt");
10 //        fw.write("ok168");
11 //        fw.close();
12         /**
13          * 为了提高写入的效率,使用了字符流的缓冲区。
14          * 创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联。
15          */
16         BufferedWriter bufw = new BufferedWriter(fw);
17
18         //使用缓冲区中的方法将数据写入到缓冲区中。
19         bufw.write("hello world !");
20         bufw.newLine();
21         bufw.newLine();
22         bufw.write("!hello world !");
23         bufw.write("!hello world !");
24         //使用缓冲区中的方法,将数据刷新到目的地文件中去。
25         bufw.flush();
26         //关闭缓冲区,同时关闭了fw流对象
27         bufw.close();
28     }
29 }

FileInputStream和FileOutputStream用法的简介

前面提到过FileReader、FileWriter以字符流的形式读写数据,现在来说说以字节流的形式操作数据

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5
 6
 7 public class FInputStream {
 8
 9     /**
10      * @param args
11      */
12     public static void main(String[] args) {
13         // TODO Auto-generated method stub
14        try {
15         FileInputStream fis=new FileInputStream(new File("D:\\123.txt"));//新建一个FileInputStream对象
16         try {
17             byte[] b=new byte[fis.available()];//新建一个字节数组
18             fis.read(b);//将文件中的内容读取到字节数组中
19             fis.close();
20             String str2=new String(b);//再将字节数组中的内容转化成字符串形式输出
21             System.out.println(str2);
22         } catch (IOException e) {
23             // TODO Auto-generated catch block
24             e.printStackTrace();
25         }
26
27     } catch (FileNotFoundException e) {
28         // TODO Auto-generated catch block
29         e.printStackTrace();
30     }
31     }
32 }

一、FileOutputStream类。

构造函数:FileOutputStream fos = new FileOutputStream(String fileName);//参数为相关联的文件路径及名称。

主要方法:viod write(byte []b);//将b.length 个字节写入到目的文件中去。

void write(byte []b,int off,int len);//将指定数组中偏移量off开始的len个字节写入该文件中。(未演示)

void fiush();//刷新该流,将该流中的字节刷到目的文件中去。

void close();//关闭此流,并释放所有与该流相关的资源。同样关闭前先调用flush()方法。

二、FileInputStrean类

构造函数:FileInputStream fis = new FileInputStream(String fileName);//参数为相关联的文件路径及名称。

主要方法:int read();//从此流中读取下一个数据字节。

int read(byte[] b);//从此流中读取b.length个字符到该byte数组中。

int read(byte[] b,int off,int len);//将此流中的len个字节数据读入到byte数组偏移off(含off)向后位置中。(未演示)

int available();//返回剩余的文件字节数。   

package ByteStream;  

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;  

public class ByteStreamDemo {  

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
//      demo_Write();
        demo_Read();  

    }  

    public static void demo_Read() throws IOException {
        FileInputStream fis = new FileInputStream("C:\\out_Stream.txt");  

//      System.out.println(fis.available());//打印文件所占字节数。
//      byte []bfr = new byte[fis.available()];//不建议使用,当文件过大时,会照成内存不足。
//      fis.read(bfr);
//      System.out.println(new String(bfr));  

        //推荐使用这个。
        byte[]ch = new byte[1024];
        int len = 0;
        while((len = fis.read(ch)) != -1){
            System.out.println(new String(ch,0,len));
        }  

//      int ch = 0;
//      while((ch = fis.read()) != -1){
//          System.out.print((char)ch);
//      }  

//      int ch = fis.read();
//      System.out.println((char)ch);  

        fis.close();  

    }  

    public static void demo_Write() throws IOException {
        //创建字节输出流对象。用于操作文件。
        FileOutputStream fos = new FileOutputStream("C:out_Stream.txt");
        //写字节数据。
        fos.write("hello!FileOuyputStream!".getBytes());
        fos.close();
    }  

}  

原文链接地址:http://blog.csdn.net/liuhenghui5201/article/details/8279557

时间: 2024-10-01 06:55:49

Java文本编辑器中遇到的问题详解的相关文章

Java多线程编程中Future模式的详解<转>

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中Master-Worker模式的详解关于Guarded Suspeionsion模式的详解: Java多线程编程中Guarded Suspeionsion模式

java中的io系统详解

java中的io系统详解 分类: JAVA开发应用 笔记(读书.心得)2009-03-04 11:26 46118人阅读 评论(37) 收藏 举报 javaiostreamconstructorstringbyte 相关读书笔记.心得文章列表 Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他

java文本编辑器v2.0 图形用户界面

package 文本编辑器; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GraphicsEnvironment; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListe

Java中的main()方法详解

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下: 1 /** 2 * Java中的main()方法

java中System.getProperty()方法详解

java中System.getProperty()方法详解,如下: System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号 System.out.println("Java提供商名称:" + System.getProperty("java.vendor")); // Java提供商名称 System.out.println

Java NIO中的Glob模式详解

Java NIO中的Glob模式详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.什么是Glob? 在编程设计中,Glob是一种模式,它使用通配符来指定文件名.例如:.java就是一个简单的Glob,它指定了所有扩展名为"java"的文件.Glob模式中广泛使用了两个通配符""和"?".其中星号表示"任意的字符或字符组成字符串",而问号则表示"任意单个字符&quo

Java I/O : Java中的进制详解

作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层.那么二进制,字节码这些会在哪里用到呢? 自问自答:在跨平台的时候,就凸显神功了.比如说文件读写,数据通信,还有Java编译后的字节码文件.下面会有个数据通信的例子哦. Java对对象实现Serializablle接口,就可以将其转化为一系列字节,而在通信中,不必要关系数据如何在不同机器表示和字节的顺

Java知多少(54)断言详解

断言的概念 断言用于证明和测试程序的假设,比如“这里的值大于 5”.断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响. 断言的使用 断言有两种方法: 一种是 assert<<布尔表达式>> : 另一种是 assert<<布尔表达式>> :<<细节描述>>. 如果布尔表达式的值为false , 将抛出AssertionError 异常: 细节描述是AssertionError异常的描述文本使用 javac –source

PHP中刷新输出缓冲详解[转载]

PHP中刷新输出缓冲详解 分类: PHP Web开发2011-07-23 17:42 1795人阅读 评论(0) 收藏 举报 phpbuffer浏览器outputapache模块脚本 buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页.主要用于存储速度不同步的设备或者优先级不同的设备之间传办理数据的区域.通过buffer,可以使进程这间的相互等待变少.这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入 一个字符,操作系统并不会立即把这