Java学习笔记之IO(一):File类的用法

来源:互联网 发布:ubuntu制作u盘启动工具 编辑:程序博客网 时间:2024/05/22 16:51
package com.io;import java.io.File;import org.junit.Test;/*IO流,也叫输入输出流(input、 output);IO技术主要的作用使解决设备与设备之间的数据传输问题;比如:硬盘-->内存;    内存-->硬盘;IO技术的应用场景:导出报表、上传、下载、解析xml文件...数据一般是以文件的形式保存到硬盘上的;于是sun公司就使用了一个 File 类来描述文件或者文件夹; */public class Demo1 {/*File类的构造方法:File(String pathname):根据指定路径的文件或者文件夹创建一个File类对象;File(File parent, String child):根据parent路径名对应的File对象和child路径名创建一个File对象;File(String parent, String child):根据parent路径名和child路径名创建一个File对象; */@Testpublic void test1(){// 根据指定路径的文件或者文件夹创建一个File类对象;File file1 = new File("D:\\a.text");System.out.println("文件存在吗?" + file1.exists()); // exist():判断文件是否存在;File file2 = new File("D:\\");System.out.println("文件夹存在吗?" + file2.exists());File file3 = new File("D:\\test");System.out.println("文件夹存在吗?" + file3.exists());}@Testpublic void test2(){File parentFile = new File("D:\\");File file = new File(parentFile, "a.txt");System.out.println("文件是否存在:" + file.exists());File file2 = new File("D:\\", "a.txt");System.out.println("文件是否存在:" + file2.exists());}/*目录分隔符:在Windows系统上的目录分隔符是\,该符号不能单独使用,需要转义(\);在linux系统上的目录分隔符是/;但是,windows系统可以使用两种目录分隔符,写成/也可以,而且只需要写一个/就行;其他操作系统都是只认一种目录分隔符; */@Testpublic void test3(){// File.separator:获取当前系统所使用的目录分隔符;Java会自动匹配当前系统,获取对应的目录分隔符;System.out.println(File.separator);String filepath = "D:" + File.separator + "a.txt";System.out.println("文件路径:" + filepath);// 文件路径:D:\a.txt}/*路径问题:绝对路径:该文件在硬盘上的完整路径;一般都是以盘符开头的; 相对路径:资源文件相对于当前程序所在的路径;. 代表当前路径;.. 代表上一级路径;注意:如果资源文件与当前程序不在同一个盘符下面,是无法写出相对路径的; */@Testpublic void test4(){File file = new File(".");System.out.println("获取当前程序的绝对路径:" + file.getAbsolutePath());File file2 = new File("..\\..\\..\\a.txt");System.out.println("文件是否存在:" + file2.exists());// 如果在src目录下创建一个新的文件b.txt,那么相对路径可以直接写成下面的样式;File file3 = new File("src\\b.txt");System.out.println("文件是否存在:" + file3.exists());}}


package com.io;import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import org.junit.Test;/*File类的常见方法:创建方法:createNewFile():在指定位置创建一个文件;创建成功,返回true;如果文件已经存在,创建失败,返回false;mkdir():在指定位置创建目录;只能创建最后一级目录,如果上级目录不存在就会抛异常;mkdirs():在指定位置创建目录;可以创建多级目录;renameTo(File dest):重命名文件或文件夹;删除方法:delete():删除一个文件或一个空文件夹;成功返回true;失败返回false;deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录;保证程序异常时创建的临时文件也可以被删除;判断方法:exists():判断文件或文件夹是否存在;isFile():判断是否是文件;isDirectory():判断是否是文件夹;isHidden():判断是否是一个隐藏的文件,或是否是一个隐藏的目录;isAbsolute():判断是否是绝对路径;获取方法:getName():获取文件或文件夹的名称,不包含上级路径;不管文件是否存在;getPath(): 返回路径;getAbsolutePath():获取文件的绝对路径,与文件是否存在没关系length():获取文件的大小(字节数),如果文件不存在则返回0,如果是文件夹也返回0。getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。lastModified():获取最后一次被修改的时间。文件夹相关:static File[] listRoots():列出所有的根目录(Window中就是所有系统的盘符)list():返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。listFiles():返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。list(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。listFiles(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。 */// 自定义文件名过滤器class MyFilter implements FilenameFilter{// dir:文件夹;name:文件名;@Overridepublic boolean accept(File dir, String name) {System.out.println(name);// 过滤规则:return name.endsWith(".java");}}public class Demo2 {// 创建方法@Testpublic void create() throws IOException{// 创建指定的文件File file = new File("D:\\a.txt");System.out.println("创建成功了吗?" + file.createNewFile());// 在指定位置创建目录;创建成功,返回true;如果目录已经存在,创建失败,返回false;File dir = new File("D:\\aa");System.out.println("创建目录成功了吗?" + dir.mkdir());// 只能创建最后一级目录,如果上级目录不存在,就会报错;File dir2 = new File("D:\\aaa\\bbb");System.out.println("创建目录成功了吗?" + dir2.mkdir());// 创建多级目录File dirs = new File("D:\\aaa\\bbb");System.out.println("创建多级目录成功了吗:" + dirs.mkdirs());// renameTo():如果目标文件与源文件是在同一个目录下,那么renameTo()的作用是重命名;// 如果不是在同一个目录下,renameTo()的作用就是剪切;File destFile = new File("D:\\abc.txt");System.out.println("重命名文件:" + file.renameTo(destFile));// 如果目标文件夹与源文件夹在同一目录下,且源文件夹是空文件夹,那么可以重命名;如果源文件夹是非空的,则不能操作;File d1 = new File("D:\\test");File d2 = new File("D:\\aaaaaatest");System.out.println("重命名文件夹:" + d1.renameTo(d2));// 如果目标文件夹与源文件夹不在同一目录下,则不能操作;File d3 = new File("D:\\test");File d4 = new File("E:\\aaaaaatest");System.out.println("重命名文件夹:" + d3.renameTo(d4));}// 删除方法@Testpublic void delete(){// 删除指定的文件;File file = new File("D:\\a.txt");System.out.println("删除文件:" + file.delete());// 删除文件夹;只能删除空的文件夹;File file2 = new File("D:\\aa");System.out.println("删除文件夹:" + file2.delete());// jvm退出时删除文件或文件夹;如果文件或文件夹存在,就删除;如果不存在,没有任何操作;file2.deleteOnExit();}// 判断方法@Testpublic void judge(){File file = new File("D:\\a.txt");System.out.println("判断文件是否存在:" + file.exists());System.out.println("判断是否是文件:" + file.isFile());System.out.println("判断是否是目录:" + file.isDirectory());System.out.println("判断是否隐藏:" + file.isHidden());System.out.println("判断是否是绝对路径:" + file.isAbsolute());}// 获取方法@Testpublic void getFile(){// 获取文件的名称;即使文件不存在,也可以获取;File file = new File("D:\\test\\a.txt");System.out.println("获取文件名:" + file.getName()); // 文件名:a.txt// 获取文件或文件夹的路径;创建File对象的时候传入什么路径,他就获取什么路径;File dir = new File("..\\..\\test");System.out.println("获取路径:" + file.getPath());System.out.println("目录路径:" + dir.getPath());// 获取文件的绝对路径;在创建File对象时指定的路径前面,加上当前程序的绝对路径;System.out.println("绝对路径:" + dir.getAbsolutePath());//D:\myeclipse\workspace\IO\..\..\test// 获取文件的大小System.out.println("文件的大小(字节数):" + file.length());// 获取文件或文件夹的父路径;根据创建File对象时传入的路径来获取;不管文件是否存在;System.out.println("父路径:" + dir.getParent());// 父路径:..\..// 获取文件最后一次被修改的时间;File f = new File("D:\\a.txt");long last = f.lastModified();System.out.println("最后一次被修改的时间(毫秒值):" + last); // 1506675946380Date date = new Date(last);SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String strDate = dateFormat.format(date);System.out.println("最后一次被修改的时间:" + strDate);}// 获取方法@Testpublic void getDir(){// 获取所有的根目录;File[] roots = File.listRoots();for (int i = 0; i < roots.length; i++){System.out.println(roots[i].getAbsolutePath());}System.out.println("-------------");// 获取指定目录下所有的文件及文件夹;只获取文件或文件夹的名字;File file = new File("D:\\myeclipse\\workspace\\IO");String[] strs = file.list();for (String str : strs){System.out.println(str);}System.out.println("-------------");// 获取指定目录下所有的文件及文件夹;获取的是对应的File对象;File[] files = file.listFiles();for (File f : files){System.out.println(f.getAbsolutePath());}System.out.println("-------------");}// 文件名过滤器@Testpublic void listJava(){File file = new File("D:\\myeclipse\\workspace\\IO");if (!file.exists()){System.out.println("文件夹不存在;");return;}// 如果文件名过滤器中的accept()方法返回true,则将符合规则的文件放入File数组中;File[] files = file.listFiles(new MyFilter());for (File f : files){System.out.println(f);}}}