javaIO流(一)--File类的基本使用
一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理 File(File parent,String child) --范例:使用File类常见一个文件: 1 public class MyFileDemo { 2 public static void main(String[] args) throws IOException { 3 File file = new File("D:demo1.txt"); 4 //如果现在想要进行文件的基本操作,可以使用如下的基本方法:
5 /* 1.public boolean createNewFile()throws IOException 创建新文件 6 (true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
7 /*2.判断文件是存在: public boolean exists()*/
8 /*3.public boolean delete()删除当前文件*/
9 if (file.exists()) { 10 System.out.println("当前文件已经存在,首先删除当前文件"); 11 System.out.println(file.delete() ? "删除文件成功" : "删除文件失败"); 12 } 13 System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败"); 14 } 15 }
--可以发现File类实现的就是文件本身的的处理,文件内容的处理并不属于File类的范畴 现在已经实现文件的基础操作,但是对于这个操作是存在一些问题的,对代码进行优化处理: 1 public class MyFileDemo { 2 public static void main(String[] args) throws IOException { 3 File file = new File("D:" + File.separator + "demo1java.txt"); 4 //如果现在想要进行文件的基本操作,首先删除当前文件"); 11 System.out.println(file.delete() ? "删除文件成功" : "删除文件失败"); 12 } 13 System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败"); 14 } 15 }
--但是随着系统的适应性的不断加强,对于当前的路径操作,也可以使用随意使用了,无关"/","",但是对于标准来讲,更建议使用这个常量 1 public class MyFileDemo { 2 public static void main(String[] args) throws IOException { 3 File file = new File("D:" + File.separator + "java_test"
4 + File.separator + "java_demo" + File.separator + "demo1java.txt"); 5 //如果现在想要进行文件的基本操作,可以使用如下的基本方法:
6 /* 1.public boolean createNewFile()throws IOException 创建新文件 7 (true,创建失败)*/
8 /*2.判断文件是存在: public boolean exists()*/
9 /*3.public boolean delete()删除当前文件*/
10 /*4.获取父路径getParentFile public File getParentFile() */
11 /*5.创建目录: 12 * public boolean mkdir()创建单个目录 13 * public boolean mkdirs()创建多个目录*/
14 if(!file.getParentFile().exists()){ //父路径不存在
15 System.out.println(file.getParentFile().mkdirs()?"创建父路径成功":"创建父路径失败"); //创建父路径
16 } 17 System.out.println(file.createNewFile()?"创建文件成功":"创建文件失败"); 18 } 19 }
--这种判断并建立父路径的操作,在很多情况下可能只要一次,但是如果将这个判断一直都停留在代码中,将会导致时间复杂度的提升,如果要想提升性能,请先保证目录已经创建,从而逐步提升性能 除了可以进行文件的操作之外,也可以通过File类获取文件本身提供的信息: 1 class MathUtil { 2 private MathUtil() { 3 } 4
5 /**
6 * 实现四舍五入操作 7 * 8 * @param num 当前的数字信息 9 * @param scale 要保留的小数位数 10 * @return 四舍五入的结果 11 */
12 public static double round(double num,int scale) { 13 return Math.round(Math.pow(10,scale) * num) / Math.pow(10,scale); 14 } 15 } 16
17 public class MyFileTest { 18 public static void main(String[] args) { 19 //文件是否可读:boolean canRead() 20 //文件是否可写:boolean canWrite()
21 File file = new File("d:" + File.separator + "java_test" + File.separator + "my.png"); 22 System.out.println("文件是否可读: " + file.canRead()); 23 System.out.println("文件是否可写: " + file.canWrite()); 24 //获取文件的长度long length() 即获取文件大小
25 System.out.println("文件大小: " + MathUtil.round(file.length() / (double) 1024 / 1024,2) + "Mb"); 26 //获取文件的最后一次修改的日期时间 long lastModified()
27 System.out.println("最后的修改时间: " +
28 new SimpleDateFormat("yyyy-MM-dd HH:mm:sss").format(new Date(file.lastModified()))); 29 //查看该文件是否为目录boolean isDirectory() 30 //查看该文件是否为文件boolean isFile()
31 System.out.println("查看是否为目录: " + file.isDirectory()); 32 System.out.println("查看是否为文件: " + file.isFile()); 33
34 //我们发现既然可以判断还是否为目录,那么是否可以在判断是目录之后返回该目录下的所有子目录以及目录文件呢
35 System.out.println("========列出目录内容========"); 36 //列出目录内容 public File[] listFiles();
37 File directory = new File("F:" + File.separator + "idea_workspace"); 38 if(directory.isDirectory()){ //判断当前这是一个目录
39 File[] files = directory.listFiles(); 40 for (int i = 0; i < files.length; i++) { 41 System.out.println(files[i]); 42 } 43 } 44 } 45 }
--这些新的获得都是文件或目录本身的操作,都不设计到文件内容的处理 1 public class ListAllFileDemo { 2 public static void main(String[] args) { 3 //设置任意一个目录的路径,而后将这个目录中所有文件的信息都进行打印输出处理 4 //可以采用递归的方法来实现
5 Scanner scanner = new Scanner(System.in); 6 String dir = scanner.next(); 7 File file = new File(dir); 8 if (!file.isDirectory()) { 9 System.out.println("当前输入的路径并不是一个文件夹路径"); 10 } else { 11 listDir(file,1); 12 } 13 } 14
15 /**
16 * 列出当前输入文件目录的所有文件列表 17 * 18 * @param file 当前的文件夹路径 19 * @param index 请输入1 20 */
21 public static void listDir(File file,int index) { 22 File thisFile = file; //当前的文件路径
23 StringBuilder tab = new StringBuilder(); //间隔处理符
24 File[] files = thisFile.listFiles(); 25 for (int i = 0; i < index - 1; i++) { 26 tab.append(" "); 27 } 28 for (File f : files) { 29 System.out.println(tab.toString() + f); 30 if (f.isDirectory()) { 31 listDir(f,index++); 32 } 33 } 34 } 35 }
--范例:批量修改文件名称 1 public class MyModifyFileNameDemo { 2 public static void main(String[] args) { 3 /*程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为txt*/
4 //文件的路径必须以最后一个.为止 5 //如果存在后缀,则为修改,否则为追加
6 Scanner scanner = new Scanner(System.in); 7 System.out.println("请输入目录名称:"); 8 renameDir(new File(scanner.next())); 9 } 10
11 public static void renameDir(File file) { 12 if (file.isDirectory()) { 13 File[] files = file.listFiles(); 14 for (File f : files) { 15 renameDir(f); 16 } 17 } else { 18 File parentFile = file.getParentFile(); 19 String name = file.getName(); 20 if (name.contains(".")) { 21 name = name.substring(0,name.lastIndexOf(".")) + ".txt"; 22 } else { 23 name = name + ".txt"; 24 } 25 System.out.println(name); 26 } 27 } 28 }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |