一、流的分类:

  1、流按照方向分类:分为输入流和输出流,流的操作是相对于内存而言。

    输入流的定义:当我们从数据源中将数据读取到内存中就称为输入流,也叫读取流。

    输出流的定义:当我们将内存中处理好的数据写入数据源,就称为输出流,写入流。

  2、流按照内容分类:可以分为字节流、字符流、对象流。

数据的传输在底层都是以二进制的方式传输,所以无论是哪种流,其实都是字节流。而字符流和对象流只是在字节的基础上做了一层封装,以便于对字符数据和对象数据进行操作。

二、流的父类

  1、所有字节流的父类都是:InputStream和OutputStream;

  2、所有字符流的父类都是:Reader和Writer。

三、流的操作步骤

  1、建立流。所谓建立流就是建立内存和数据源之间传输数据的通道。

  2、操作流。操作传输的数据。

  3、关闭流。关闭内存和数据源之间的通道,释放资源。

    例:

   

import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;    public class  StreamTest{
	    public StreamTest(){
		      InputStream in = null;
		        try {
				         //建立流
			      in = new FileInputStream("info.txt"); 
			      int data = 0;
				         //操作流,一次读取一个字节。如果为-1,那么表示读取完毕
			      while((data = in.read()) != -1){
				      System.out.println(data);
			    }
		      } catch (Exception e) {
			      e.printStackTrace();
		      }finally{
			      try {
				         //关闭流
				       in.close();
			      } catch (Exception e) {
				      e.printStackTrace();
			        }
		      }
	    }
  }

  备注:流使用完毕后,必须关闭,如果不关闭会浪费内存资源,另外,写入流有可能写不进数据。关闭的顺序必须是先建立的流后关闭,后建立的流先关闭。

四、建流的目的是:完成内存数据和磁盘数据的转换。

五、以下是部分流的文件操作

  //第二个参数为true,表示已追加的方式向资源文件中写入数据,运行代码几次,资源文件就会追加几次数据,并且不会覆盖资源文件原来的数据。

  OutputStream out = null;

  out = new FileOutputStream("info.txt",true);

  out.write("Java技术".getBytes());

  注:、当使用OoutputStream写入流时,如果文件不存在,读取流会抛出FileNotFoundException异常。写入流会自动创建新文件。但是前提是该文件所在的目录必须存在。

 

//创建文件对象
  File f = new File("c:/abc/a.txt");
  //或得文件名
  String name = f.getName();
  System.out.println(name);
  //得到文件所在目录
  String dir = f.getParent();
  system.out.println(dir);
  //得到文件的绝对路径
  String path = f.getAbsolutePath();
  System.out.println(path);
  //判断文件对象所代表的文件或目录是否存在,如果存在,结果就为true
  boolean isEx = f.exists();
  System.out.println(isEx);
  //判断文件对象代表的是否是存在 的文件
  System.out,pritln(f.isFile());
  //判断文件对象代表的是否是目录
  System.out.println(f.isDirectory());
  //得到一个目录中偶有文件列表,包含文件和目录,但是不包含子目录中的内容
  File f = new File("D:/KwDownload");
  File[] fs = f.listFiles();
    for(File ft : fs){
      System.out.println(ft.getName());
      }
  //删除指定目录下的文件
  File f = new File("D:/KwDownload/a.docx");
  f.delete();
  //删除文件对象所代表的文件或目录,前提必须是空文件才删得掉
  File f = new File("D:/KwDownload/aaa");
  f.delete();
  //得到指定目录下所有文件及子文件夹中的文件
  public static void (String[] args){
    list(new File("D:/KwDownload"));
    }
  public static void list(File dirFile){
    File[] fs = dirFile.listFiles();
      for(File f : fs){
        if(f.isFile()){
          System.out.println(f.getAbsolutePath());
        }else{
          list(f)
          }
       }
    }
  //创建制定路径的目录
  File f = new File("D:/aaa");
  f.mkdir();
  //创建文件选择对象
  JFileChooser jfc = new JFileChooser;