当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

<b>一个例子</b>[Java编程]

赞助商链接



  本文“<b>一个例子</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为体验新类的效果,下面让我们看看若何改正IOStreamDemo.java示例的呼应区域,以便利用Reader和Writer类:
//: NewIODemo.java
// Java 1.1 IO typical usage
import java.io.*;

public class NewIODemo {
  public static void main(String[] args) {
    try {
      // 1. Reading input by lines:
      BufferedReader in =
        new BufferedReader(
          new FileReader(args[0]));
      String s, s2 = new String();
      while((s = in.readLine())!= null)
        s2 += s + "\n";
      in.close();

      // 1b. Reading standard input:
      BufferedReader stdin =
        new BufferedReader(
          new InputStreamReader(System.in));      
      System.out.print("Enter a line:");
      System.out.println(stdin.readLine());

      // 2. Input from memory
      StringReader in2 = new StringReader(s2);
      int c;
      while((c = in2.read()) != -1)
        System.out.print((char)c);

      // 3. Formatted memory input
      try {
        DataInputStream in3 =
          new DataInputStream(
            // Oops: must use deprecated class:
            new StringBufferInputStream(s2));
        while(true)
          System.out.print((char)in3.readByte());
      } catch(EOFException e) {
        System.out.println("End of stream");
      }

      // 4. Line numbering & file output
      try {
        LineNumberReader li =
          new LineNumberReader(
            new StringReader(s2));
        BufferedReader in4 =
          new BufferedReader(li);
        PrintWriter out1 =
          new PrintWriter(
            new BufferedWriter(
              new FileWriter("IODemo.out")));
        while((s = in4.readLine()) != null )
          out1.println(
            "Line " + li.getLineNumber() + s);
        out1.close();
      } catch(EOFException e) {
        System.out.println("End of stream");
      }

      // 5. Storing & recovering data
      try {
        DataOutputStream out2 =
          new DataOutputStream(
            new BufferedOutputStream(
              new FileOutputStream("Data.txt")));
        out2.writeDouble(3.14159);
        out2.writeBytes("That was pi");
        out2.close();
        DataInputStream in5 =
          new DataInputStream(
            new BufferedInputStream(
              new FileInputStream("Data.txt")));
        BufferedReader in5br =
          new BufferedReader(
            new InputStreamReader(in5));
        // Must use DataInputStream for data:
        System.out.println(in5.readDouble());
        // Can now use the "proper" readLine():
        System.out.println(in5br.readLine());
      } catch(EOFException e) {
        System.out.println("End of stream");
      }

      // 6. Reading and writing random access
      // files is the same as before.
      // (not repeated here)

    } catch(FileNotFoundException e) {
      System.out.println(
        "File Not Found:" + args[1]);
    } catch(IOException e) {
      System.out.println("IO Exception");
    }
  }
} ///:~
大家普通瞥见的是转换历程非常直观,代码看起来也颇类似.但这些都不是重要的辨别.最重要的是,由于随机拜候文件已经改变,所以第6节未再反复.
第1节收缩了一点儿,因为假定要做的全部事情就是读取行输入,那么只需求将一个FileReader封装到BufferedReader之内便可.第1b节展示了封装System.in,以便读取掌握台输入的新办法.这里的代码量增添了一些,因为System.in是一个DataInputStream,并且BufferedReader需求一个Reader参数,所以要用InputStreamReader来举行转换.
在2节,可以看到假若有一个字串,并且想从中读取数据,只需用一个StringReader替换StringBufferInputStream,剩下的代码是完好相同的.
第3节揭露了新IO流库计划中的一个错误.假若有一个字串,并且想从中读取数据,那么不能再以任何情势利用StringBufferInputStream.若编译一个触及StringBufferInputStream的代码,会得到一条“反对”消息,奉告我们不要用它.此时最好换用一个StringReader.但是,假定要象第3节这样举行格局化的内存输入,就必须利用DataInputStream——没有什么“DataReader”可以替换它——而DataInputStream很不幸地要求用到一个InputStream参数.所以我们没有挑选的余地,只好利用编译器不赞成的StringBufferInputStream类.编译器一样会发出反对信息,但我们对此束手无策(注释②).
StringReader替换StringBufferInputStream,剩下的代码是完好相同的.

②:到你目前正式利用的时刻,这个错误大概已经改正.

第4节明显是从老式数据流到新数据流的一个直接转换,没有需求分外指出的.在第5节中,我们被逼迫利用全部的老式数据流,因为DataOutputStream和DataInputStream要求用到它们,并且没有可供替换的东西.但是,编译期间不会产生任何“反对”信息.若不赞成一种数据流,普通是由于它的构建器产生了一条反抵消息,禁止我们利用整个类.但在DataInputStream的情形下,只有readLine()是不赞成利用的,因为我们最好为readLine()利用一个BufferedReader(但为其他全部格局化输入都利用一个DataInputStream).
若对比第5节和IOStreamDemo.java中的那一小节,会注意到在这个版本中,数据是在文本之前写入的.那是由于Java 1.1本身存在一个错误,以下述代码所示:
//: IOBug.java
// Java 1.1 (and higher?) IO Bug
import java.io.*;

public class IOBug {
  public static void main(String[] args) 
  throws Exception {
    DataOutputStream out =
      new DataOutputStream(
        new BufferedOutputStream(
          new FileOutputStream("Data.txt")));
    out.writeDouble(3.14159);
    out.writeBytes("That was the value of pi\n");
    out.writeBytes("This is pi/2:\n");
    out.writeDouble(3.14159/2);
    out.close();

    DataInputStream in =
      new DataInputStream(
        new BufferedInputStream(
          new FileInputStream("Data.txt")));
    BufferedReader inbr =
      new BufferedReader(
        new InputStreamReader(in));
    // The doubles written BEFORE the line of text
    // read back correctly:
    System.out.println(in.readDouble());
    // Read the lines of text:
    System.out.println(inbr.readLine());
    System.out.println(inbr.readLine());
    // Trying to read the doubles after the line
    // produces an end-of-file exception:
    System.out.println(in.readDouble());
  }
} ///:~
看起来,我们在对一个writeBytes()的调用之后写入的任何东西都不是可以恢复的.这是一个非常有限的错误,但愿在你读到本书的时刻已得到改正.为检测能否改正,请运行上述程序.若没有得到一个违例,并且值都能精确打印出来,就表明已经改正.
  以上是“<b>一个例子</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .