---恢复内容开始---
在变量、数组和对象中储存的数据是暂时存在的,程序结束后它们就会丢失。为了能够永久地保存创建的数据,需要将其保存在磁盘文件中,这样就可以在其他程序中使用它们。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(); } } }
结果如下:
---恢复内容结束---