Java的I/O是什么?Java的I/O可用来做什么?如何实现Java的I/O?本文围绕这些问题展开。
I/O全称是Input/Output,Java的I/O就是Java的输入与输出操作。与之相关的接口和类都放在java.io包里面,因而,在进行Java输入输出操作时,需要导入该包。利用Java的I/O大大地扩展了系统的输入与输出范畴,不仅可以从控制台输入输出,还可以从其他数据存储形式进行输入输出,例如本地文件、远程数据库等。Java的I/O在文件数据的读写、数据的网络发送与接收等很多场合发挥着重要作用。
Java的I/O如此有用,那么如何实现Java的I/O呢?实际上,Java的I/O操作时基于流的方式来实现的。它包括字节流和字符流。字节流,简而言之,就是数据的输入与输出采用字节的形式流入和流出;字符流,顾名思义,就是数据的输入与输出采用字符的形式流入和流出。
Java的I/O常用字节输入流包括FileInputStream、BufferedInputStream和DateInputStream,与之对应的字节输出流包括FileOutputStream、BufferedOutputStream和DateOutputStream,前者是抽象类InputStream的子类,后者是抽象类OutputStream的子类。Java的I/O常用字符输入流包括FileReader和BufferedReader,与之对应的字符输出流包括FileWriter和BufferedWriter,前者是抽象类Reader的子类,后者是抽象类Writer的子类。而这些类都放在java.io包里。因而,在使用各种流进行操作的时候,可以查阅该包下各种流类的定义,根据具体的问题和业务需求,选择合适的构造器、属性和方法进行处理。
现在让我们来求解一个具体问题。
问题描述:请把从控制台输入的数据保存到一个文本文件里,实现数据持久化。
解题分析:
1)对于从控制台输入,需要设计一个输入流用来读取控制台所输入的内容,代码如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
2)记录读取的内容,代码如下:
String content = br.readLine();
3)检查用来存储内容的文件是否存在,若是不存在,创建文件,若是存在,则通知已有。代码如下:
File file = new File("C:\\content.txt");
if(file.exists() && file.isFile())
{
System.out.println("用来保存记录内容的文件已存在");
}
else
{
try
{
file.createNewFile();
}
catch(IOException e)
{
e.printStackTrace();
}
}
4)设计一个输出流,把所记录的内容保存到文本文件。代码如下:
try
{
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
fw.close();
}
catch(IOException e)
{
e.printStackTrace();
}
或者
try
{
PrintWriter pw = new PrintWriter(file);
pw.write(content);
pw.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
完整代码如下:
package com.jieke.io;
import java.io.*;
/**
*<p>Title:SaveDataToFile</p>
*<p>Description:把控制台输入的数据保存到一个文件里,实现数据持久化</p>
*<p>Copyright:copyright(c) 2012</p>
*<p>Filename:SaveDataToFile.java</p>
*@author Wang Luqing
*@version 1.0
*/
public class SaveDataToFile
{
public static void main(String[] args)
{
String content = "";
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
content = br.readLine();
br.close();
}
catch(IOException e)
{
e.printStackTrace();
}
File file = new File("C:\\content.txt");
if(file.exists() && file.isFile())
{
System.out.println("用来保存记录内容的文件已存在");
}
else
{
try
{
file.createNewFile();
}
catch(IOException e)
{
e.printStackTrace();
}
}
try
{
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
fw.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
总结:
1)Java的I/O十分有用,深入了解和应用Java的IO包十分有必要。
2)所谓的输入与输出都是相对于程序而言,换句话说,就是以程序为参照系。