隨筆 - 303  文章 - 883  trackbacks - 0
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          歡迎光臨! 
          閑聊 QQ:1074961813

          隨筆分類(357)

          我管理的群

          公共blog

          • n維空間
          • Email : java3d@126.com 群 : 12999758

          參與管理的論壇

          好友的blog

          我的其他blog

          朋友的網站

          搜索

          •  

          最新評論

          File I/O

          1. Introduction

          Java? uses a stream-based approach to input and output.?A stream in this context is a flow of data, which could either be read in from a data source (e.g. file, keyboard or socket) or written to a data sink (e.g file, screen, or socket).?Java? currently supports two types of streams:

          • 8-bit streams.?These are intended for binary data i.e. data that will be manipulated at the byte level.?The abstract base classes for 8-bit streams are InputStream and OutputStream.
          • 16-bit streams.?These are intended for character data.?16-bits streams are required becuase Java?'s internal representation for characters is the 16-bit Unicode format rather than the 8-bit ASCII format.?The abstract base classes for 16-bit streams are Reader and Writer.

          It is possible to create a 16-bit Reader from an 8-bit InputStream using the InputStreamReader class e.g.

          Reader r = new InputStreamReader(System.in);????? // System.in is an example of an InputStream.

          Likewise, it is possible to create a 16-bit Writer from an 8-bit OutputStream using the OutputStreamWriter class e.g.

          Writer w = new OutputStreamWriter(System.out);???? // System.out is an example of an OutputStream.


          2. Text Input

          The FileReader class is used to read characters from a file.?This class can only read one 16-bit Unicode character at a time (characters that are stored in 8-bit ASCII will be automatically promoted to Unicode.)?In order to read a full line of text at once, we must layer a BufferedReader on top of the FileReader. Next, the individual words in the line of text can be extracted using a StringTokenizer.?If the text contains numbers, we must also perform String to Number conversion operations, like Integer.parseInt() and Double.parseDouble().

          import java.io.*;
          import java.util.*;

          ?public class Main {
          ??? public static void main(String[] args) {
          ??????? try {
          ??????????? readText(args[0]);
          ??????? }
          ??????? catch (IOException e) {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }

          ??? // This function will read data from an ASCII text file.
          ??? public static void readText(String fileName) throws IOException {
          ??????? // First create a FileReader.? A Reader is a 16-bit input stream,
          ??????? // which is intended for all forms of character (text) input.
          ??????? Reader reader = new FileReader(fileName);

          ??????? // Now create a BufferedReader from the Reader.? This allows us to
          ??????? // read in an entire line at a time.
          ??????? BufferedReader bufferedReader = new BufferedReader(reader);
          ??????? String nextLine;

          ??????? while ((nextLine = bufferedReader.readLine()) != null) {
          ??????????? // Next, we create a StringTokenizer from the line we have just
          ??????????? // read in.? This permits the extraction of nonspace characters.
          ??????????? StringTokenizer tokenizer = new StringTokenizer(nextLine);

          ??????????? // We can now extract various data types as follows.
          ??????????? String companyName = tokenizer.nextToken();
          ??????????? int numberShares = Integer.parseInt(tokenizer.nextToken());
          ??????????? double sharePrice = Double.parseDouble(tokenizer.nextToken());

          ??????????? // Print the data out on the screen.
          ??????????? System.out.print(companyName + " has " + numberShares);
          ??????????? System.out.println(" million shares valued at $" + sharePrice);

          ??????????? // Close the file.
          ??????????? bufferedReader.close();
          ??????? }
          ??? }
          }

          This program can be easily converted to read in data from the keyboard.?Simply replace

          ??? Reader reader = new FileReader(fileName);

          with

          ??? Reader = new InputStreamReader(System.in);


          3. Text Output

          The FileWriter class is used to write text to a file.?This class is only capable of writing out individual characters and strings. We can layer a PrintWriter on top of the FileWriter, so that we can write out numbers as well.

          import java.io.*;
          import java.util.*;
          import java.text.*;

          ?public class Main {
          ??? public static void main(String[] args) {
          ??????? try {
          ??????????? writeText(args[0]);
          ??????? }
          ??????? catch (IOException e) {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }

          ??? // This function will write data to an ASCII text file.
          ??? public static void writeText(String fileName) throws IOException {
          ??????? // First create a FileWriter.? A Writer is a 16-bit output stream,
          ??????? // which is intended for all forms of character (text) output.
          ??????? Writer writer = new FileWriter(fileName);

          ??????? // Next create a PrintWriter from the Writer.? This allows us to
          ??????? // print out other data types besides characters and Strings.
          ??????? PrintWriter printWriter = new PrintWriter(writer);

          ??????? // Now print out various data types.
          ??????? boolean b = true;
          ??????? int i = 20;
          ??????? double d = 1.124;
          ??????? String str = "This is some text.";

          ??????? printWriter.print(b);
          ??????? printWriter.print(i);
          ??????? printWriter.print(d);
          ??????? printWriter.println("\n" + str);

          ??????? // This is an example of formatted output.? In the format string,
          ??????? // 0 and # represent digits.? # means that the digit should not
          ??????? // be displayed if it is 0.
          ??????? DecimalFormat df = new DecimalFormat("#.000");
          ??????? printWriter.println(df.format(200.0));? // 200.000
          ??????? printWriter.println(df.format(0.123));? // .123

          ??????? // This will flush the PrintWriter's internal buffer, causing the
          ??????? // data to be actually written to file.
          ??????? printWriter.flush();

          ??????? // Finally, close the file.
          ??????? printWriter.close();
          ??? }
          }


          4. Binary Input and Output

          Binary input and output is done using the 8-bit streams. To read binary data from a file, we create a FileInputStream and then layer a DataInputStream on top of it.?To write binary data to a file, we create a FileOutputStream and then layer a DataOutputStream on top of it. The following example illustrates this.

          import java.io.*;

          ?public class Main {
          ??? public static void main(String[] args) {
          ??????? try {
          ??????????? writeBinary(args[0]);
          ??????????? readBinary(args[0]);
          ??????? }
          ??????? catch (IOException e) {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }

          ??? // This function will write binary data to a file.
          ??? public static void writeBinary(String fileName) throws IOException {
          ??????? // First create a FileOutputStream.
          ??????? OutputStream outputStream = new FileOutputStream(fileName);

          ??????? // Now layer a DataOutputStream on top of it.
          ??????? DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

          ??????? // Now write out some data in binary format.? Strings are written out
          ??????? // in UTF format, which is a bridge between ASCII and Unicode.
          ??????? int i = 5;
          ??????? double d = 1.124;
          ??????? char c = 'z';
          ??????? String str = "Some text";

          ??????? dataOutputStream.writeInt(i);?????????? // Increases file size by 4 bytes.
          ??????? dataOutputStream.writeDouble(d);?? // Increases file size by 8 bytes.
          ??????? dataOutputStream.writeChar(c);????? // Increases file size by 2 bytes.
          ??????? dataOutputStream.writeUTF(str);???? // Increases file size by 2+9 bytes.

          ??????? // Close the file.
          ??????? dataOutputStream.close();
          ??? }

          ??? // This function will read binary data from a file.
          ??? public static void readBinary(String fileName) throws IOException {
          ??????? // First create a FileInputStream.
          ??????? InputStream inputStream = new FileInputStream(fileName);

          ??????? // Now layer a DataInputStream on top of it.
          ??????? DataInputStream dataInputStream = new DataInputStream(inputStream);

          ??????? // Now read in data from the binary file.
          ??????? int i;
          ??????? double d;
          ??????? char c;
          ??????? String str;

          ??????? i = dataInputStream.readInt();
          ??????? d = dataInputStream.readDouble();
          ??????? c = dataInputStream.readChar();
          ??????? str = dataInputStream.readUTF();

          ??????? System.out.print("integer " + i + " double " + d);
          ??????? System.out.println(" char " + c + " String " + str);

          ??????? // Close the file.
          ??????? dataInputStream.close();
          ??? }
          }



          地震讓大伙知道:居安思危,才是生存之道。
          posted on 2007-02-25 15:34 小尋 閱讀(298) 評論(0)  編輯  收藏 所屬分類: j2se/j2ee/j2me
          主站蜘蛛池模板: 木兰县| 新昌县| 昭平县| 武隆县| 措美县| 潮州市| 天峻县| 饶河县| 宁海县| 沾化县| 栾川县| 龙州县| 许昌市| 县级市| 怀柔区| 内江市| 嫩江县| 彰武县| 通江县| 蒙阴县| 汽车| 天长市| 巩留县| 济宁市| 西华县| 伊宁市| 翼城县| 浠水县| 晋宁县| 清徐县| 勃利县| 广丰县| 博兴县| 襄樊市| 天等县| 古丈县| 罗定市| 九江市| 西乌珠穆沁旗| 丹阳市| 五原县|