JAVA 的FILE类,以及常用方法
使用绝对路径或者相对路径创建File对象
package com.example.IO; import java.io.File; public class Test1 { public static void main(String[] args) { //绝对路径 File f1 = new File("G:\\File"); System.out.println("f1的相对路径"+f1.getAbsolutePath()); // 相对路径,相对于工作目录,如果在idea中,就是项目目录 和你的claas 在一起 File f2 = new File("file.txt"); System.out.println("f2的相对路径"+f2.getAbsolutePath()); File f3 =new File(f1,"file.txt"); // 把f1作为父目录创建文件对象 System.out.println("f3的相对路径"+f3.getAbsolutePath()); } }
运行结果
f1的相对路径G:\File f2的相对路径F:\IDEA_gulimall\Login_Register\yanwc\file.txt f3的相对路径G:\File\file.txt
注意1: 需要在D:\LOLFolder确实存在一个LOL.exe,才可以看到对应的文件长度、修改时间等信息
注意2: renameTo方法用于对物理文件名称进行修改,但是并不会修改File对象的name属性
package com.example.IO; import java.io.File; import java.util.Date; public class Test1 { public static void main(String[] args) { File f = new File("G:\\File\\file.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("G:\\File\\FILE.txt"); f.renameTo(f2); System.out.println("把file改名成了FILE"); System.out.println("修改名字后的结果是"+f2); System.out.println("注意: 需要在G:\\File存在FILE,\r\n才可以看到对应的文件长度、修改时间等信息"); } }
运行结果是
当前文件是:G:\File\file.txt 判断是否存在:true 判断是否是文件夹:false 判断是否是文件:true 获取文件的长度:0 获取文件的最后修改时间:Thu Jan 01 08:00:00 CST 1970 把file改名成了FILE 修改名字后的结果是G:\File\FILE.txt 注意: 需要在G:\File存在FILE, 才可以看到对应的文件长度、修改时间等信息
文件常用设置
package file; import java.io.File; import java.io.IOException; public class TestFile { public static void main(String[] args) throws IOException { File f = new File("d:/LOLFolder/skin/garen.ski"); // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) 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(); } }
练习1
一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。
遍历这个目录下所有的文件(不用遍历子目录)
找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名
注: 最小的文件不能是0长度
package com.example.IO; import java.io.File; import java.util.Arrays; import java.util.Date; public class Test1 { public static void main(String[] args) { long minSize = Integer.MAX_VALUE; 定义一个最大值,方便后面最小值的赋值 long maxSize = 0;//定义为0,方便后面最大值的赋值 //定义最大字节和最小文件 File Maxfile = null; File Minfile = null; File f1 = new File("D:\\XMind"); Boolean f2 = f1.exists(); System.out.println("查看是否存在改文件夹" + f2); //为空直接返回 if (f2 == false) { return; } File[] fs = f1.listFiles(); //数组转换 System.out.println("fs" + Arrays.toString(fs)); for (File file : fs) { if (file.isDirectory()) { continue;//如果是文件夹,则跳出此次循环 } //如果文件字节大小大于0 if (file.length() > maxSize) { maxSize = file.length();//将字节大小赋值给maxSize Maxfile = file;//将文件名赋值给maxFile } //判断文件字节大小不为o,且小于minSize, //第二次循环进来的时候,如果第二次文件字节大小小于第一次,则再一次进行赋值,循环结束,则有最小字节数 if (file.length()!=0 && file.length()<minSize){ minSize = file.length();; Minfile = file; } } System.out.println("最大的文件是"+Maxfile+",其大小是"+maxSize+"字节"); System.out.println("最小的文件是"+Minfile+",其大小是"+minSize+"字节"); } }
结果为:
查看是否存在改文件夹true fs[D:\XMind\artifacts.xml, D:\XMind\bcl-java.txt, D:\XMind\configuration, D:\XMind\epl-v10.html, D:\XMind\features, D:\XMind\jre, D:\XMind\lgpl-3.0.html, D:\XMind\p2, D:\XMind\plugins, D:\XMind\readme.txt, D:\XMind\thirdparty, D:\XMind\tools, D:\XMind\unins000.dat, D:\XMind\unins000.exe, D:\XMind\XMind-original.ini, D:\XMind\XMind.exe, D:\XMind\XMind.ini, D:\XMind\xmindshell.dll, D:\XMind\xmind_file.ico, D:\XMind\xmind_xmp.ico, D:\XMind\xmind_xmt.ico] 最大的文件是D:\XMind\unins000.exe,其大小是1196233字节 最小的文件是D:\XMind\XMind-original.ini,其大小是506字节
什么JAVA 的流 STREAM?
什么是流(Stream),流就是一系列的数据
比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream
输出流:OutputStream
如下代码,就建立了一个文件输入流,这个流可以用来把数据从硬盘的文件,读取到JVM(内存)。
目前代码只是建立了流,还没有开始读取,真正的读取在下个章节讲解。
package stream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TestStream { public static void main(String[] args) { try { File f = new File("d:/lol.txt"); // 创建基于文件的输入流 FileInputStream fis = new FileInputStream(f); // 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
输出流
package file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class TestStream { public static void main(String[] args) { File f =new File("d:/lol.txt"); try { FileOutputStream fos = new FileOutputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); } } }