Java中的IO流基础(1)

           之前学习java io流的时候总觉得云里雾里,所以现在在来总结一下。

一.什么是io流

            io流是用来处理设备之间的数据传输的,java对数据的操作是通过流的方式。java用于操作流的对象都存在于

java.io包中。其实,所谓的io流,就是一种系统资源,因为对数据的操作(例如保存)是window操作系统自带的,例

如,在记事本中写一段文本,那么这段文本就存在于内存中,保存之后,那么这段文本就从内存到了硬盘中,这个操

作就用到了window自带的输出流(写操作)。各种语言只是提供对这种系统资源的api。

二.文件File类的构造和分隔符问题

           设备上数据存储最常见的表现形式为文件。File类能操作文件和目录(文件夹)。

           通过文件路径来将文件封装成一个对象,常用的有3中方式,代码如下:

package com.java.IO;

import java.io.File;

public class FileDemo {
	 //这里提一下,private修饰的属性只能本类可以访问,其他类不能通过对象.属性和类名.属性的方式来访问
	 private static final String FILE_SEPARATOR = System.getProperty("file.separator");
        public static void main(String[] args) {
		    //通过文件路径直接创建对象,相对路径是相对的是当前项目的项目名,既可以将存在的路径封装为对象,也可以将不存在的路径封装为对象
        	File file=new File("abc\\1.txt");
        	//将文件路径拆分为两部分在创建对象
        	File file2=new File("c:\\","1.txt");
        	//通过文件对象和路径来创建对象
        	File file3=new File("c:\\");
        	File file4=new File(file3,"1.txt");
        	/*这里要注意的是不同的操作系统所用到的文件分隔符是不同的,所以将java文件导入不同的操作系统中会出现问题
        	 *我们有两种解决方式,一种,通过System类来获得文件分隔符,第二种是通过File类来获得,并且在java中写
        	 *文件分隔符要用‘\\’来将‘\’进行转义。
        	*/
        	File file5=new File("c:"+FILE_SEPARATOR+"1.txt");   
       // 	System.out.println(file5);   c:\1.txt
        	File file6=new File("c:"+File.separator+"1.txt");
        	System.out.println(file6);
        	
	}
}

三.File类中获取文件属性的常用方法

package com.java.IO;

import java.io.File;

public class FileDemo2 {
    public static void main(String[] args) {
	
    File file=new File("f:\\ioDemo\\1.txt");
    File file2=new File("ioDemo\\1.txt");
    //获取文件名称
    System.out.println(file.getName());   //1.txt
    //获取文件大小
    System.out.println(file.length());    //25
    //获取文件类型,这个java不支持,因为文件的类型是可以自定义的,所以提供类型没有意义
    
    //获取文件的路径,比较getParent()和getPath()的区别
    System.out.println(file.getParent()); //f:\ioDemo
    System.out.println(file.getPath());   //f:\ioDemo\1.txt
    //获取文件的相对路径
    System.out.println(file2.getParent());   //ioDemo
    System.out.println(file2.getPath());     //ioDemo\1.txt
  }
}

四.文件和文件夹的创建和删除

package com.java.IO;

import java.io.File;
import java.io.IOException;

public class FileDemo3 {
      public static void main(String[] args) throws IOException {
	     //创建文件。当文件存在时,返回false。当文件不存在时,创建文件,返回true。
    	 File file=new File("f:\\ioDemo\\2.txt");
    	 boolean result=file.createNewFile();
    	 /*删除文件。当文件删除成功时,返回true,删除未成功时,返回false。例如:
    	  * 当文件被应用程序占用时,就会删除失败
    	 */
    //	 boolean result_delete=file.delete();
    	 //创建一级文件夹
    	 File file2=new File("f:\\ioDemo\\abc");
    	 boolean result2=file2.mkdir();
         //删除一级目录
    	 boolean result_delete2=file2.delete();
    	 //创建多级目录
    	 File file3=new File("f:\\ioDemo\\abcd\\abc");
    	 boolean result3=file3.mkdirs();
    	 /*删除多级目录时,如果文件夹中有内容,那么文件夹将删除失败
    	  * */
    	 
    	 /*不能凭借肉眼主观来断定一个文件到底是文件夹过着文件,要使用方法来辨别
    	  * 因为,文件可能不带后缀名,文件夹也可能有“后缀名”。
    	 */
    	 file.isFile();
    	 file.isDirectory();
    	 
    	 //另外,获取文件绝对路径的方法
    	 String getAbsolutePath = file.getAbsolutePath();
    	 System.out.println(getAbsolutePath);   //f:\ioDemo\2.txt
	}
}

五.list()方法和listFiles()方法

package com.java.IO;

import java.io.File;

public class FileDemo4 {
  public static void main(String[] args) {
	//获取指定路径下所有文件和文件夹的名称。包含隐藏文件和非隐藏文件
	  File file=new File("f:\\");
	  String[] strs=file.list();
	  for(String str:strs) {
		  System.out.println(str);
	  }
	  
	//获取指定路径下所有文件和文件夹。包含隐藏文件和非隐藏文件
	  File[] files=file.listFiles();
	  for(File file1:files) {
		  System.out.println(file1);
	  }
/*	  $RECYCLE.BIN
	  1111.txt
	  BaiduNetdiskDownload
	  Development
	  DownLoadRecord.ini
	  eclipse-workspace
	  GameDownload
	  Hlddz
	  Hldn
	  io
	  ioDemo
	  KuGou
	  MyEclipse2017IWorkSpaces
	  Program Files
	  QLDownload
	  System Volume Information
	  Training template(JAVA)
	  Windows10Upgrade
	  腾讯游戏
	  f:\$RECYCLE.BIN
	  f:\1111.txt
	  f:\BaiduNetdiskDownload
	  f:\Development
	  f:\DownLoadRecord.ini
	  f:\eclipse-workspace
	  f:\GameDownload
	  f:\Hlddz
	  f:\Hldn
	  f:\io
	  f:\ioDemo
	  f:\KuGou
	  f:\MyEclipse2017IWorkSpaces
	  f:\Program Files
	  f:\QLDownload
	  f:\System Volume Information
	  f:\Training template(JAVA)
	  f:\Windows10Upgrade
	  f:\腾讯游戏
*/
  }
}

六.文件名过滤器

      1.验证部分代码:

package com.java.IO;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo5 {
  public static void main(String[] args) {
	  //通过后缀名来过滤文件
	  File file=new File("f:\\");
	  FilenameFilter fileNameBy=new FileNameBySuffix("space");
	  fileNameBy=new FileNameByContains("d");
	  String[] strs=file.list(fileNameBy);
	  for(String str:strs) {
		  System.out.println(str);   // 第一个过滤器:eclipse-workspace
		                             //第二个过滤器:QLDownload

	  }
	 
}
}

     2.所定义的过滤器:

package com.java.IO;

import java.io.File;
import java.io.FilenameFilter;

public class FileNameBySuffix implements FilenameFilter {
	
    private String filterMethod;
    public FileNameBySuffix(String filterMethod) {
    	this.filterMethod=filterMethod;
    }
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(filterMethod);
	}
    
}
class FileNameByContains implements FilenameFilter{
     
    private String filterMethod;
    public FileNameByContains(String filterMethod) {
    	this.filterMethod=filterMethod;
    }
	@Override
	public boolean accept(File dir, String name) {
		return name.contains(filterMethod);
	}
	
}

七.文件过滤器

        1.定义测试代码:

package com.java.IO;

import java.io.File;
import java.io.FileFilter;

public class FileFilterDeml {
   public static void main(String[] args) {
	//定义文件过滤器
	   File file=new File("f:\\");
	   //过滤   f盘下所有的文件
	   FileFilter fileFilter=new FileFilterImp();
	   //过滤  f盘下所有后缀名为 space的文件或文件夹
	   fileFilter=new FileFilterImp2("space");
	   File[] files=file.listFiles(fileFilter);
	   for(File file1:files) {
		   System.out.println(file1);  //第一个过滤器:f:\1111.txt       f:\DownLoadRecord.ini
		                               //第二个过滤器:f:\eclipse-workspace
	   } 
   }
}

          2.定义文件过滤器

package com.java.IO;

import java.io.File;
import java.io.FileFilter;

public class FileFilterImp implements FileFilter{
	@Override
	public boolean accept(File pathname) {
		return pathname.isFile();
	}

}
class FileFilterImp2 implements FileFilter{
    private String filter_method;
    public FileFilterImp2(String filter_method) {
    	this.filter_method=filter_method;
    }
	@Override
	public boolean accept(File pathname) {
		return pathname.getName().endsWith(filter_method);
	}

}

                在学习 io,将会从 获取子目录中的内容  开始。

猜你喜欢

转载自blog.csdn.net/qq_41160264/article/details/81589923
今日推荐