IO相关Demo

这几天复习了IO相关知识

只为记录,好记性不如烂笔头

有误请指正

ありがとうございます。

我的公众号

作者:晨钟暮鼓c
个人微信公众号:程序猿的月光宝盒

1.判断存在,存在改名,并延迟删除,不存在新建

package pers.day19;

import java.io.File;

/**
 * 判断存在,存在改名,并延迟删除,不存在新建
 * @author Administrator
 *
 */
public class IODemon {
	public static void main(String[] args) throws Exception{
		test();
	}

	private static void test() throws Exception {
		File dir = new File("E:");
		File f1 = new File(dir,"jsc.txt");
		System.out.println(f1.exists());
		//不存在
		if(!f1.exists()){
			//新建
			f1.createNewFile();
		}else{
			//存在,把他改名为test.txt,其中new 是新建file对象
			f1.renameTo(new File(dir,"test.txt"));
			Thread.sleep(10000);
			new File(dir,"test.txt").delete();
		}
		
	}
}

2.文件夹递归

package pers.day19;

import java.io.File;
/**
 * 文件夹递归
 * @author Administrator
 *
 */
public class IODemon2 {
	public static void main(String[] args) {
		//新建文件对象
		File f = new File("E:/CAPH2018");
		//查找所有文件
		try {
			listAllFiles(f);
		} catch (Exception e) {
			System.out.println("null");
		}
	}

	private static void listAllFiles(File f) {
		//得到所有文件及目录
		File[] files = f.listFiles();
		for (File file : files) {
			//列出所有文件及目录
			System.out.println(file);
			//file如果是目录,进行递归
			if(file.isDirectory()){
				listAllFiles(file);
			}
		}
	}
}

3.列出分层结构

package pers.day19;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;

/**
 * 列出分层结构
 * @author Administrator
 *
 */
public class IODemon3 {
	public static void main(String[] args) {
		//效果:CAPH2018->LiveJT_01-AutoRun->Setup->AutoInst->LiveJT_01.exe
		String file = "E:/CAPH2018/LiveJT_01-AutoRun/Setup/AutoInst/LiveJT_01.exe";
		File f = new File(file);
		//把他放在List里
		ArrayList<String> parentNames = new ArrayList<>();
		//自定义的方法
		listAllParent(parentNames, f);
		
		System.out.println(parentNames);//答应得到的List
		Collections.reverse(parentNames);//颠倒顺序
		System.out.println(parentNames);//答应颠倒顺序后的List
		
		//新建一个字符串做拼接
		StringBuilder sb = new StringBuilder(40);
		//循环添加List中的内容拼接字符转
		for (String name : parentNames) {
			sb.append(name).append("->");
		}
		//删除最后的字符转
		sb.deleteCharAt(sb.length() - 1).deleteCharAt(sb.length() - 1);
		//最终打印
		System.out.println(sb);
	}

	private static void listAllParent(ArrayList<String> parentNames, File f) {
		//如果文件的上级目录的名字不等于空
		if (!"".equals(f.getParentFile().getName())) {
			//把这个名字加入parentNames的List中
			parentNames.add(f.getParentFile().getName());
		}

		//如文件的上上级目录不等于空(有上上级目录)
		if (f.getParentFile().getParentFile() != null) {
			//就调用自己,文件是改文件的上级文件
			listAllParent(parentNames, f.getParentFile());
		}
	}
}

4.批量修改文件名,截取掉所有视频文件:教育-Java学院-老师-

package pers.day19;

import java.io.File;

/**
 * 批量修改文件名,截取掉所有视频文件:教育-Java学院-老师-.
 * @author Administrator
 *
 */
public class IOdemon4 {
	public static void main(String[] args) {
		//路径
		File dir = new File("E:/123");
		//所有文件
		File[] allFiles = dir.listFiles();
		//需要删除的字段 
		String deletes = "教育-学院-老师-";
		//循环遍历
		for (File file : allFiles) {
			//打印获取到的文件
			System.out.println(file);
			//如果这个文件的名字包含需要删除的字段
			if(file.getName().contains(deletes)){
				//新的文件名,把需要删除的字段替换成空字符串
				String newFileName = file.getName().replace(deletes, "");
				//重命名文件
				file.renameTo(new File(dir,newFileName ));
			}
		}
		System.out.println("--------------------------------------------------");
		//重新获取文件放入之前的File数组
		allFiles = dir.listFiles();
		//遍历
		for (File file : allFiles) {
			System.out.println(file);
		}
	}
}

5.文件过滤器

package pers.day19;

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

/**
 * 文件过滤器
 * @author Administrator
 *
 */
public class IOdemon5 {
	public static void main(String[] args) {
		File dir = new File("E:/123");
		
		File[] files = dir.listFiles(new FilenameFilter() {
			//新建匿名内部类
			public boolean accept(File dir, String name) {
				//这个文件是文件,且name以“.avi结尾”,为true,存到files数组中
				return new File(dir,name).isFile() && name.endsWith(".avi");
			}
		});
		for (File file : files) {
			System.out.println(file);
		}
	}
}

6.文件字节输出

package pers.day19;

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

/**
 * 文件字节输出
 * @author Administrator
 *
 */
public class IODemon6 {
	public static void main(String[] args) throws Exception {
		//1.创建目标对象(表示把数据保存到那一个文件)
		File target = new File("file/test.txt");
		//2.创建文件字节输出流对象
		FileInputStream in = new FileInputStream(target);
		//3.具体的输出操作
		byte[] b = new byte[5];
		System.out.println(Arrays.toString(b));
		int len = -1;
		
		while((len = in.read(b)) != -1){
		String str = new String(b,0,len);
		System.out.println(str);
		}
		
		//4.关闭资源
		in.close();
	}
}

7.文件字节输入

package pers.day19;

import java.io.File;
import java.io.FileOutputStream;

/**
 * 文件字节输入
 * @author Administrator
 *
 */
public class IODemon7 {
	public static void main(String[] args) throws Exception {
		//1.创建目标对象(表示把数据保存到那一个文件)
		File target = new File("file/test.txt");
		//2.创建文件字节输出流对象
		FileOutputStream out = new FileOutputStream(target,false);
		//3.具体的输出操作
		out.write("I LOVE U".getBytes(),0,"I LOVE U".length());
		//4.关闭资源
		out.close();
	}
}

8.文件拷贝

package pers.day19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件拷贝
 * @author Administrator
 *
 */
public class IODemon8 {
	public static void main(String[] args) throws Exception {
		//1.创建源
		File srcFile = new File("file/test.txt");
		File destFile = new File("file/test_copy.txt");
		//2.创建输入流对象
		FileInputStream in = new FileInputStream(srcFile);
		FileOutputStream out = new FileOutputStream(destFile);
		//3.读取操作
		byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
		int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
		while ((len = in.read(buffer)) != -1) {
			//打印读取的数据
			System.out.println(new String(buffer,0,len));
			//数据在buffer数组中
			out.write(buffer, 0, len);
		}
		//4.关闭输入流对象(资源)
		in.close();
		out.close();
	}
}

9.资源正确关闭

package pers.day19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件拷贝关闭资源
 * @author Administrator
 *
 */
public class IODemon9 {
	public static void main(String[] args) throws Exception {
		//		test1();
		test2();
	}

	/**
	 * java1.7以前的正常关闭资源
	 */
	private static void test1() {
		//声明资源对象
		FileInputStream in = null;
		FileOutputStream out = null;
		try {
			//可能出现的异常代码
			//1.创建源
			File srcFile = new File("file/test.txt");
			File destFile = new File("file/test_copy.txt");
			//2.创建输入流对象
			in = new FileInputStream(srcFile);
			out = new FileOutputStream(destFile);
			//3.读取操作
			byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
			int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
			while ((len = in.read(buffer)) != -1) {
				//打印读取的数据
				System.out.println(new String(buffer, 0, len));
				//数据在buffer数组中
				out.write(buffer, 0, len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//4.关闭输入流对象(资源)
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			try {
				if (out != null) {
					out.close();
				}
			} catch (Exception e3) {
				e3.printStackTrace();
			}
		}
	}

	/**
	 * java1.7新特性 自动关闭资源
	 */
	private static void test2() {
		//1.创建源
		File srcFile = new File("file/test.txt");
		File destFile = new File("file/test_copy.txt");
		try (
				//打开资源的代码
				//2.创建输入流对象
				FileInputStream in = new FileInputStream(srcFile);
				FileOutputStream out = new FileOutputStream(destFile);
			) {
			//可能出现异常的代码
			//3.读取操作
			byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
			int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
			while ((len = in.read(buffer)) != -1) {
				//打印读取的数据
				System.out.println(new String(buffer, 0, len));
				//数据在buffer数组中
				out.write(buffer, 0, len);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

原文地址:https://www.cnblogs.com/jsccc520/p/10946721.html