第一章:I/O 文件对象
1.创建文件对象
使用绝对路径或者相对路径创建File对象
public static void main(String[] args) { // 绝对路径 File f1 = new File("E:\\桌面\\测试"); System.out.println("f1的绝对路径:" + f1.getAbsolutePath()); // 相对路径,相对于工作目录,如果在eclipse中,就是项目目录 File f2 = new File("yanwc.exe"); System.out.println("f2的绝对路径:" + f2.getAbsolutePath()); // 把f1作为父目录创建文件对象(并未真实创建) File f3 = new File(f1, "yanwc.txt"); System.out.println("f3的绝对路径:" + f3.getAbsolutePath()); }
运行结果:
f1的绝对路径:E:\桌面\测试 f2的绝对路径:F:\IDEA_gulimall\csdn_DDD_lotter\springboot-daily-crud-record\yanwc.exe f3的绝对路径:E:\桌面\测试\yanwc.txt
2.文件常用方法
public static void main(String[] args) { File f = new File("E:\\桌面\\测试\\abc.txt"); System.out.println("当前文件是:" +f); //文件是否存在 System.out.println("判断是否存在:"+f.exists()); //是否是文件夹 System.out.println("判断是否是文件夹:"+f.isDirectory()); //是否是文件(非文件夹) System.out.println("判断是否是文件:"+f.isFile()); //文件长度 System.out.println("获取文件的长度:"+f.length()); //文件最后修改时间 long time = f.lastModified(); Date d = new Date(time); System.out.println("获取文件的最后修改时间:"+d); //设置文件修改时间为1970.1.1 08:00:00 f.setLastModified(0); //文件重命名 File f2 =new File("E:\\桌面\\测试\\abcef.txt"); f.renameTo(f2); System.out.println("把abc.txt改名成了abcef.txt"); System.out.println("注意: 需要本地有文件才可以看到对应的文件长度、修改时间等信息"); }
运行结果:
当前文件是:E:\桌面\测试\abc.txt 判断是否存在:true 判断是否是文件夹:false 判断是否是文件:true 获取文件的长度:0 获取文件的最后修改时间:Tue Mar 07 15:23:51 CST 2023 把abc.txt改名成了abcef.txt 注意: 需要本地有文件才可以看到对应的文件长度、修改时间等信息
public static void main(String[] args) throws IOException { File f = new File("E:\\桌面\\测试\\abc.txt"); // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) f.list(); // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) File[]fs= f.listFiles(); // 以字符串形式返回获取所在文件夹 f.getParent(); // 以文件形式返回获取所在文件夹 f.getParentFile(); // 创建文件夹,如果父文件夹skin不存在,创建就无效 f.mkdir(); // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹 f.mkdirs(); // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常 f.createNewFile(); // 所以创建一个空文件之前,通常都会创建父目录 f.getParentFile().mkdirs(); // 列出所有的盘符c: d: e: 等等 f.listRoots(); // 刪除文件 f.delete(); // JVM结束的时候,刪除文件,常用于临时文件的删除 f.deleteOnExit(); }
DEMO1
/** * 一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。 * 遍历这个目录下所有的文件(不用遍历子目录 * 找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名 * <p> * 注: 最小的文件不能是0长度 * * @param args */ public static void main(String[] args) { File file = new File("C:\\WINDOWS"); File[] fs = file.listFiles(); //创建最大最小用于存放文件及其文件大小 long maxSize = 0; long minSize = Integer.MAX_VALUE; System.out.println("minSize的值" + minSize); File maxFile = null; File minFile = null; //循环 for (File f : fs) { //f 判断 是否是文件夹 if (f.isDirectory()) continue; if (f.length() > maxSize) { maxSize = f.length(); maxFile = f; } if (f.length() != 0 && f.length() < minSize) { minSize = f.length(); minFile = f; } } System.out.println("获取到最大的文件是" + maxFile.getAbsolutePath() + "文件大小为" + maxSize+"=="+maxFile.length()); System.out.println("获取到最小的文件是" + minFile.getAbsolutePath() + "文件大小为" + minSize); } }
DEMO2
/** * 一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。 * 要求遍历子文件夹 * 找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名 * <p> * 注: 最小的文件不能是0长度 * * @param args */ static long maxSize = 0; static long minSize = Integer.MAX_VALUE; static File minFile = null; static File maxFile = null; public static void listFiles(File file) { //是否是文件 是则进入 if (file.isFile()) { //获取最大的文件及其值 if (file.length() > maxSize) { maxSize = file.length(); maxFile = file; } if (file.length()!=0 &&file.length() < minSize) { minFile = file; minSize = file.length(); } return; } //是不是文件夹 是则进入 if (file.isDirectory()) { //以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) File[] fs = file.listFiles(); if (null!=fs) for (File f : fs) { //此处可以理解为 是文件的 循环到文件 把文件放入 遍历中进行遍历 listFiles(f); } } } public static void main(String[] args) { File file = new File("C:\\桌面图标"); listFiles(file); System.out.println("执行结束"); System.out.printf("最大的文件是%s,其大小是%,d字节%n", maxFile.getAbsoluteFile(), maxFile.length()); System.out.printf("最小的文件是%s,其大小是%,d字节%n", minFile.getAbsoluteFile(), minFile.length()); }
第二章:I/O 什么是流
1 : 什么是流
当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
数据源可以是文件,还可以是数据库,网络甚至是其他的程序
比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream
输出流:OutputStream
2 : 文件输入流输出流
如下代码,就建立了一个文件输入流,这个流可以用来把数据从硬盘的文件,读取到JVM(内存);
创建基于文件的输入流 FileInputStream fis = new FileInputStream(file); 创建基于文件的输出流 FileOutputStream fis = new FileOutputStream(file);
public static void main(String[] args) { try { File file = new File("E:\\桌面\\闫文超.txt"); // 创建基于文件的输入流 FileInputStream fis = new FileInputStream(file); // 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中 System.out.println("输入流"+fis); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { File file = new File("E:\\桌面\\闫文超.txt"); FileOutputStream fis = new FileOutputStream(file); // 通过这个输出流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中 System.out.println("输出流"+fis); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
第三章:I/O 字节流
ASCII码 概念点击概念即可跳转;
InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileInputStream 是InputStream子类,以FileInputStream 为例进行文件读取
1. 以字节流的形式读取文件内容
public static void main(String[] args) { try { File file = new File("E:\\桌面\\闫文超.txt"); // 创建基于文件的输入流 FileInputStream fis = new FileInputStream(file); // 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中 byte[] bytes=new byte[(int) file.length()]; fis.read(bytes); for (byte b : bytes) { System.out.println("输出位"+b); } fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.写入数据导文件夹
/** * 以字节流的形式向文件写入数据 中的例子,当lol2.txt不存在的时候,是会自动创建lol2.txt文件的。 * 但是,如果是写入数据到d:/xyz/lol2.txt,而目录xyz又不存在的话,就会抛出异常。 * 那么怎么自动创建xyz目录? * 如果是多层目录 d:/xyz/abc/def/lol2.txt 呢? * * @param args */ public static void main(String[] args) { try { File f = new File("d:/xyz/abc/def/lol2.txt"); File filepath=f.getParentFile();//获取文件所在目录 //判断是否存在 不存在则进入 if (!filepath.exists()){ filepath.mkdir(); //使用mkdir会抛出异常,因为该目录的父目录也不存在 filepath.mkdirs(); //使用mkdirs则会把不存在的目录都创建好 } //创建文件夹,如果父文件夹skin不存在,创建就无效 创建有效则进入 byte data[] = {88, 89}; FileOutputStream fis = new FileOutputStream(f); fis.write(data); fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
第四章:I/O 关闭流的方式
第五章:I/O 字符流
第六章:I/O 中文问题
第七章:I/O 缓冲流
第八章:I/O 数据流流
第九章:I/O 对象流
第十章:I/O System.in
第十一章:I/O 联系DEMO
第十二章:I/O 字节流
第十三章:I/O 字节流
文章主要来源how2j ;主要目的加深学习的印象;