I/O(输入/输出)

---恢复内容开始---

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

  结果如下:

 

 

---恢复内容结束---

posted @ 2018-01-27 10:53  TANGPANG  阅读(1176)  评论(0编辑  收藏  举报