Java IO流 --- 路径与文件操作基础

1. 两个常量及路径表示形式

import java.io.File;

/**
 * 两个常量
 * 1、 路径分隔符  ;
 * 2、 名称分隔符   \(windows系统)  /(非windows系统  linux 等)
 * @author Administrator
 *
 */
public class Test01 {
	public static void main(String[] args) {
		System.out.println(File.pathSeparator);
		System.out.println(File.separator);
		
		//路径的表示形式
		String path = "D:\\CER\\img";//\在java中表示转义字符,需要使用\\才能表示名称分隔符
		path = "D:"+File.separator+"CER"+File.separator+"img";//适用于路径动态生成
		path = "D:/CER/img";
	}
}

2. File对象的构造方式

import java.io.File;

/**
 * 相对路径与绝对路径构造File对象 
 * 1、相对路径(根据父路径位置确定子文件/目录位置)
 * 	File(String parent,String child) ---> File("D:/CER/img","connecting.gif");
 * 	File(File parent,String child) ---> File(new File("D:/CER/img"),"connecting.gif");
 * 2、 绝对路径(直接定义子文件/目录位置)
 *  File(String path);
 * @author Administrator
 *
 */
public class Test02 {
	public static void main(String[] args) {
		//相对路径构造方法1 
		File f1 = new File("D:/CER/img", "connecting.gif") ;
		System.out.println(f1.getName());
		System.out.println(f1.getPath());
		
		//相对路径构造方法2
		File f_parent = new File("D:/CER/img");
		File f2 = new File(f_parent, "connecting.gif");
		System.out.println(f2.getName());
		System.out.println(f2.getPath());
		
		//绝对路径构造方法
		File f3 = new File("D:/CER/img/connecting.gif");
		System.out.println(f3.getName());
		System.out.println(f3.getPath());
		
		//没有盘符"D:",则按照工作空间"user。dir"构建
		File f4 = new File("connecting.gif");
		System.out.println(f4.getName());
		System.out.println(f4.getPath());
		System.out.println(f4.getAbsolutePath());
		
		
	}
}

3. File类的常用方法

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

/**
 * 常用方法
 * 1、创建File对象、获取文件名、路径、上级路径
 * 2、判断信息
 * 3、长度 字节数(即文件大小)
 * 4、创建和删除文件
 * 5、临时文件
 * @author Administrator
 *
 */
public class Test03 {
	public static void main(String[] args) {
		get_Name();
		check_Message();
		file_Length();
		try {
			creat_Delete_File();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("操作文件失败");
		}
		try {
			creat_Temp_File();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获取文件名称、路径
	public static void get_Name(){
		//相对路径构造方法1 
		File f1 = new File("D:/CER/img", "connecting.gif") ;
		System.out.println(f1.getName());
		System.out.println(f1.getPath());
		System.out.println(f1.getParent());//可能返回null
				
		File f4 = new File("connecting.gif");
		System.out.println(f4.getParent());//上级返回null
	}
	//判断信息
	public static void  check_Message(){
		File f1 = new File("D:/CER/img", "connecting.gif") ;
		//exists();文件是否存在?
		System.out.println(f1.exists());
		//canWrite()/read();文件是否可以读写?
		System.out.println(f1.canWrite());
		System.out.println(f1.canRead());
		//isFile();是一个文件?
		System.out.println(f1.isFile());
		//isDirectory();是一个目录?
		System.out.println(f1.isDirectory());
		if (f1.isFile()) {
			System.out.println("是一个文件");
		}else if(f1.isDirectory()){
			System.out.println("是一个目录");
		}else{
			System.out.println("文件不存在");
		}
		//isAbsolute();是否为绝对路径?
		System.out.println(f1.isAbsolute());
	}
	public static void file_Length(){
		File f1 = new File("D:/CER/img", "connecting.gif") ;
		//文件大小,字节数;若为一个目录则长度为0
		System.out.println(f1.length());
	}
	public static void creat_Delete_File() throws IOException{
		File f3 = new File("D:/CER/img/demo.jpg");
		if (!f3.exists()) {
			//若文件不存在,创建新文件;若已存在相同文件,创建失败,返回false;若创建文件为操作系统关键字,创建失败
			Boolean flag = f3.createNewFile();
			System.out.println(flag?"创建成功":"创建失败");
			
			Boolean flag1 = f3.delete();
			System.out.println(flag1?"删除成功":"删除失败");
		}
	}
	public static void creat_Temp_File() throws IOException, InterruptedException{
		File temp = File.createTempFile("tempFile", ".temp", new File("D:/CER/img"));
		
		Thread.sleep(1000);
		
		temp.deleteOnExit();//程序退出删除临时文件
	}
}

4. 目录(Directory)操作

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;

/**
 * 操作目录 
 *  mkdir(),创建单个目录,必须保证上一级目录存在才能创建成功
 *  mkdirs(),将多级目录依次创建
 *  listFiles(new FilenameFilter()),根据要求输出文件,根据return的返回值判断
 *  listRoots 查询根路径
 * @author Administrator
 *
 */
public class Test04 {
	public static void main(String[] args) {
		File f = new File("D:/CER/img/a");
		// 保证上一级目录存在,仅生成当前级别目录
		f.mkdir();
		File f2 = new File("D:/CER/img/aa/bb/cc.txt");
		// 生成多级目录,直到生成最低级别目录
		f2.mkdirs();

		File f3 = new File("D:/CER/img");

		if (f3.isDirectory()) {
			String[] sunNames = f3.list();
			System.out.println("输出子目录、文件名称");
			for (String string : sunNames) {
				System.out.println(string);
			}

			File[] subFiles = f3.listFiles();
			System.out.println("输出子目录、文件路径");
			for (File file : subFiles) {
				System.out.println(file);
			}

		}
		File f4 = new File("D:/CER/img");
		if (f4.isDirectory()) {
			System.out.println("**************测试命令设计模式***************");
			// 命令设计模式 返回抽象路径名数组
			File[] subFiles = f4.listFiles(new FilenameFilter() {
				@Override
				// dir 即代表 f4
				public boolean accept(File dir, String name) {
					// TODO Auto-generated method stub
					System.out.println(dir.getName());
					//是一个文件且以。gif结尾
					return new File(dir,name).isFile()&&name.endsWith(".gif");
				}
			});
			for (File file : subFiles) {
				System.out.println(file);
			}
		}
		
		//查询根路径
		File[] roots = File.listRoots();
		System.out.println(Arrays.toString(roots));
		for (File file : roots) {
			//输出设备中的所有文件
			System.out.println(file.getName());
		}

	}
}

5. 使用递归方法打印目录下多级子目录及文件

import java.io.File;

/**
 * 输出目录下多级子目录
 *  使用递归的方法
 * @author Administrator
 *
 */
public class Test05 {
	public static void main(String[] args) {
		File f = new File("D:/CER/img");
		printName(f,0);
	}
	
	public static void printName(File src,int level){
		File[] subFiles = src.listFiles();
		if (src==null||!src.exists()) {
			return ;
		}
		for (int i = 0; i < level; i++) {
			System.out.print("-");
		}
		System.out.println(src.getName());
		if (src.isDirectory()) {
			for (File file : subFiles) {
				printName(file,level++);
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_30007589/article/details/81078425