---恢复内容开始---
在变量、数组和对象中储存的数据是暂时存在的,程序结束后它们就会丢失。为了能够永久地保存创建的数据,需要将其保存在磁盘文件中,这样就可以在其他程序中使用它们。Java的I/O技术可以将数据保存到文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久保存数据的要求。
本节主要讲一讲输入输出流的简单知识。java语言定义了许多类专门负责方法的输入和输出,这些类都被放在java.io包中。其中,所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流都是抽象类OutputStream(字节输出流)或抽象类writer(字符输出流)的子类。
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。InputStream是用来处理字节的,并不适合处理字符文本。Java为字符文本的输入专门提供了一套简单的类Reader‘,但Reader‘类并不是InputStream类的替换者,只是在处理字符串时化简了编程。Reader类是字符输入流的抽象类,所有字符输入流的实现都是他的子类。
OutputStream类是字节输出流的抽象类,此抽象类是表示输出流的所有类的超类。OutputStream类中的所有方法均返回void。
File类是Java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获得文件本身的一些信息,如文件所在的目录、文件的长度、文件读取权限等。数据流可以将数据写入文件中,文件也是数据流最常用的数据载体。
例:在项目中创建FileTest,在主方法中判断D盘的myword文件是否存在word.txt文件,如果该文件存在则将其删除,不存在则创建该文件。
public class FileTest{
public static void main (String [] args){
File file=new File(“word.txt”);
if (file.exists()){
file.delete();
System .out. println(“文件已删除”);
}else {
try {
file.createNewFile();
System.out.println(“文件已创建”);
}catch (Exception e){
e.printStackTrace(); }
}
}
}

File类文件提供了很多方法用于获取一些文件本身信息。
例:获取当前文件夹下的word.txt文件的文件名、文件长度并判断该文件是否为隐藏文件。
public class FileTest {
public static void main (String [] args){
File file=new File("word.txt");
if (file.exists()){
String name=file.getName();
long length =file.length();
boolean hidden=file.isHidden();
System .out. println("文件名称:"+name);
System .out. println("文件长度:"+length);
System .out. println("该文件是否为隐藏文件吗?:"+hidden);
}else {
System .out. println("该文件不存在");
}
}
}

接下来讲的是文件的输入输出流,通过举一个例子帮助读者理解。
使用FileOutputStream类向文件word.txt写入信息。然后通过FileOutputStream类将文件中的数据读取到控制台。
public class FileTest {
public static void main (String [] args){
File file=new File("word.txt");
try {
FileOutputStream out =new FileOutputStream(file);
byte buy[]="我有一只小毛驴,我从来也不骑。".getBytes();
out.write(buy);
out.close();
}catch (Exception e) {
e.printStackTrace();
}
try {
FileInputStream in=new FileInputStream(file);
byte byt[]=new byte[1024];
int len =in.read(byt);
System.out.print("文件中的信息是:"+new String (byt ,0,len));
in.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}

接下来是带缓存的输入输出流,通过举一个例子帮助读者理解。
public class Student {
public static void main(String args[]) {
String content[]= {"好久不见","最近好吗","常联系"};
File file =new File("word.txt");
try {
FileWriter fw=new FileWriter(file);
BufferedWriter bufw=new BufferedWriter(fw);
for (int k=0;k<content.length;k++) {
bufw.write(content[k]);
bufw.newLine();
}
bufw.close();
fw.close();
}catch (Exception e) {
e.printStackTrace();
}
try {
FileReader fr=new FileReader(file);
BufferedReader bufr=new BufferedReader(fr);
String s=null;
int i=0;
while ((s=bufr.readLine())!=null) {
i++;
System.out.println("第"+i+"行:"+s);
}
bufr.close();
fr.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下:
数据输入/输出流允许应用程序以机器无关的方式从底层输入流中读取基本的Java数据类型。
例:分别通过DataOutStream类的writeUTF()、writeChars()和writeBytes()方法向指定的磁盘文件中写入数据,并通过DataOutStream类的readUTF()方法将写入的数据输出到控制台。
public class Example_01 {
public static void main(String []args) {
try {
FileOutputStream fs=new FileOutputStream("word.txt");
DataOutputStream ds=new DataOutputStream(fs);
ds.writeUTF("使用writerUFT()方法写入数据");
ds.writeBytes("使用writerBytes()方法写入数据");
ds.close();
FileInputStream fis=new FileInputStream("word.txt");
DataInputStream dis=new DataInputStream(fis);
System.out.print(dis.readUTF());
} catch(Exception e) {
e.printStackTrace();
}
}
}
结果如下:
---恢复内容结束---