File类
File类概述和创建,
代码中的变量,数组,对象,集合他们是存储内存中的数据容器。他们记住的数据,在断电,或者程序终止时数据会丢失。
有些数据想要长久保存,就需要把数据存储在文件中。文件是非常重要的存储方式,在计算机硬盘中。即便断电了,或者程序终止了,存储在硬盘中的数据都不会丢失。
- File类可以定位文件:进行删除、获取文本本身信息等操作
- 但是不能读写文件内容
- 使用
IO流技术可以对硬盘中的文件进行读写 - File类在包
java.io.File下,代表操作系统的文件对象(可以是文件、也可以是文件夹) - File类提供了诸如:定位文件、获取文件本身(大小,文件名,修改时间)、删除文件/文件夹、创建文件/文件夹,判断文件类型等功能。
- file类只能对文件本身进行操作,不能读写文件里面存储的数据。
注意:File创建对象,支持绝对路径,也支持相对路径
package com.mochu.d1_file; import java.io.File; public class FileDemo { public static void main(String[] args) { // 创建File对象(指定了文件的路径),指代某个具体的文件 (路径/ 或者\\) 绝对路径:带符盘 // File f = new File("C:/Users/Administrator/Downloads/Asuna.jpg");推荐这种简单些 /*一般不使用File.separator 但是在一些跨平台Linux Windows都是用的情况下File.separator比较方便 :表示系统用什么分隔符,这里就是什么分隔符 File f1 = new File("C:" + File.separator + "Users" + File.separator + "Administrator" + File.separator + "Downloads"); */ File f = new File("C:\\Users\\Administrator\\Downloads\\Asuna.jpg"); //创建File对象 long fileSize = f.length(); System.out.println("文件大小:" + fileSize); //6k 就是6字节 // 相对路径一般定位模块中的文件,相对在工程下(从工程目录开始)--相对路径(不带盘符,默认去工程下寻找文件--推荐 data.txt内容:abc你 File f2 = new File("File-IO-App\\src\\data.txt"); System.out.println(f2.length()); //6个字节,其中abc是3个字节,你占了3个字节。 // File对象可以是文件也可以是文件夹(目录)--获取文件夹对象 File f3 = new File("C:\\Users\\Administrator\\Downloads"); f3.length() //获取文件夹本身大小,而不是里面有多少个文件加起来的一共的大小。 System.out.println("文件夹是否存在:" + f3.exists()); //注意:File对象可以指代一个不存在的文件路径.不会报错。 aaa.txt文件目录中没有 File f4 = new File("D:/resource/aaa.txt") f4.length() //0 f4.exists() //false aaa.txt表示这个文件不存在 } }Java文件重命名与路径提取技巧_java file重命名-CSDN博客 ---文件重命名方法
File类的常用方法
package com.mochu.d1_file; import java.io.File; import java.text.SimpleDateFormat; public class FileDemo01 { public static void main(String[] args) { File f1 = new File("C:\\Users\\Administrator\\Downloads\\Asuna.jpg"); /*获取绝对路径--不管是创建file对象括号中的是相对路径都会变成绝对路径 例如:File f1 = new File("Downloads\\Asuna.jpg"); 获取的路径是C:\\Users\\Administrator\\Downloads\\Asuna.jpg,即使是相对路径,也要变成绝对路径 */ System.out.println(f1.getAbsoluteFile()); // 获取文件定义时的路径--就是创建文件对象的括号里面写的路径,不管是绝对路径还是相对路径,都是获取括号里面的路径内容:C:\\Users\\Administrator\\Downloads\\Asuna.jpg System.out.println(f1.getPath()); // 获取文件的名称(带后缀) System.out.println(f1.getName()); // 获取文件的字节大小 System.out.println("文件的字节大小:" + f1.length()); // 获取文件的最后修改时间 long time = f1.lastModified(); //时间毫秒值 System.out.println("最后修改时间:" + new SimpleDateFormat("yy/MM/dd HH:mm:ss").format(time)); // 判断是文件还是文件夹 System.out.println(f1.isFile()); //判断file对象是否是文件,是文件返回true,否则false System.out.println(f1.isDirectory()); //判断file对象是否是文件夹,是文件夹返回true,否则false //判断当前文件对象,对应的文件路径是否存在,存在返回true,不存在返回false System.out.println(f1.exists()); //把文件oldfile名改成名字newfile; 目录下面只有oldfile.txt文件,没有newfile.txt文件 File oldFile = new File("D:resource/oldfile.txt"); File newFile = new File("D:resource/newfile.txt"); if (oldFile.renameTo(newFile)) { //修改成功返回true,否则false System.out.println("File renamed successfully"); } else { System.out.println("Failed to rename file"); } //修改文件夹名称 File oldFolder = new File("C:/oldFolder"); File newFolder = new File("C:/newFolder"); if (oldFolder.exists() && !newFolder.exists()) { boolean ok = oldFolder.renameTo(newFolder); if (ok) { System.out.println("重命名成功"); } else { System.out.println("重命名失败"); } } else { System.out.println("原文件夹不存在或新文件夹已存在"); } } }package com.mochu.d1_file; import java.io.File; import java.io.IOException; public class FileDemo02 { public static void main(String[] args) throws Exception { //创建一个新文件(文件内容为空),创建成功返回true,否则false File f = new File("C:\\Users\\Administrator\\Downloads\\flag.txt"); File f1 = new File("C:\\Users\\Administrator\\Downloads\\1.txt"); System.out.println(f.createNewFile()); //true System.out.println(f1.createNewFile()); //true 如果文件已经存在返回false。 // 创建一级目录(文件夹) File f2 = new File("C:\\Users\\Administrator\\Downloads\\test"); System.out.println(f2.mkdir()); //false 因为mkdir只能创建一级文件夹。 //C:\\Users\\Administrator.DESKTOP-EGNJEAO\\Desktop原来就有文件夹。 File f5 =new File("C:\\Users\\Administrator.DESKTOP-EGNJEAO\\Desktop\\aaa"); System.out.println(f5.mkdir()); //true 在后面新建了一个文件夹aaa //C:\\Users\\Administrator.DESKTOP-EGNJEAO\\Desktop原来就有文件夹。 File f5 =new File("C:\\Users\\Administrator.DESKTOP-EGNJEAO\\Desktop\\aaa\\bb"); System.out.println(f5.mkdir()); //false 因为mkdir只能创建一级文件夹。还有bb文件夹就报错 // 创建多级目录 File f3 = new File("C:\\Users\\Administrator\\Downloads\\test\\test"); System.out.println(f2.mkdirs()); //true // 删除文件或者空文件夹(返回true)删除的文件或者文件不会进入回收站, 不能删除非空文件夹(会返回false,保证安全性) File f4 = new File("C:\\Users\\Administrator\\Downloads\\test\\test"); File f5 = new File("C:\\Users\\Administrator\\Downloads\\1.txt"); System.out.println(f4.delete()); System.out.println(f5.delete()); } }package com.mochu.d1_file; import java.io.File; import java.io.IOException; public class FileDemo02 { public static void main(String[] args) throws IOException { // 遍历目录 File f = new File("C:\\Users\\Administrator\\Downloads"); String[] names = f.list(); //遍历Downloads目录下面的,只能是一级文件名称或者文件夹名称 for (String name : names) { System.out.println(name); } // 获取当前目录下的每个文件对象--拿到一级文件对象。方法更强大 ,不能拿二级或者后面级别的 File f1 = new File("C:\\Users\\Administrator\\Downloads"); File[] files = f1.listFiles(); for (File file : files) { System.out.println(file.getAbsoluteFile()); } // File f1 = new File("C:\\Users\\aa.txt"); File[] files = f1.listFiles(); //files是null,因为aa.txt文件下面没有目录了,所以是null. 如果文件夹不存,也返回nul for (File file : files) { System.out.println(file.getAbsoluteFile()); } } }方法递归
package com.itheima.file; import java.io.File; public class FileDemo { public static void main(String[] args) { test1(); test2(); } //直接方法递归 ---会出现栈溢出 public static void test1(){ System.out.println("----test1---"); test1(); } //间接方法递归 public static void test2(){ System.out.println("----test2---"); test3(); } public static void test3(){ System.out.println("----test3---"); test2(); } }package com.mochu.d2_recursion; public class RecursionDemo01 { public static void main(String[] args) { System.out.println(f(5)); } public static int f(int n) { if(n == 1) { return 1; }else { return f(n - 1) * n; } } }package com.mochu.d2_recursion; public class RecursionDemo01 { public static void main(String[] args) { System.out.println(f(100)); } public static int f(int n) { if(n == 1) { return 1; }else { return f(n - 1) + n; } } }f(x) - f(x)/2 - 1 = f(x+1) 2f(x) - f(x) - 2 = 2f(x + 1) f(x) = 2f(x + 1) + 2 求f(1) = ? 终结点: f(10) = 1package com.mochu.d2_recursion; public class RecursionDemo01 { public static void main(String[] args) { System.out.println(f(1)); System.out.println(f(2)); System.out.println(f(3)); } public static int f(int n) { if(n == 10) { return 1; }else { return 2 * f(n + 1) + 2; } } }package com.mochu.d2_recursion; import java.io.File; import java.io.IOException; public class RecursionDemo01 { public static void main(String[] args) { File f = new File("D:\\KuGou\\"); searchFile(f, "KuGou.exe"); } /** * 搜索某个目录下的所有文件 * @param dir 被搜索的目录 * @param fileName 被搜索的文件名称 */ public static void searchFile(File dir, String fileName) { // 判断dir是否是目录 if(dir.isDirectory() && dir != null) { File[] files = dir.listFiles(); if(files != null && files.length > 0) { for (File file : files) { // 判断当前的一级目录文件对象是文件还是文件夹 if(file.isFile()) { if(file.getName().contains(fileName)) { System.out.println(file.getAbsoluteFile()); try { Runtime r = Runtime.getRuntime(); r.exec(file.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } }else { // 递归 searchFile(file, fileName); } } } }else { System.out.println("您当前的目录有误"); } } }package com.mochu.d2_recursion; public class RecursionDemo02 { public static int totalNumber; // 总数量 public static int lastBottleNumber; // 记录每次剩余瓶子数 public static int lastConverNumber; // 记录每次剩余盖子数 public static void main(String[] args) { buy(10); System.out.println("总数: " + totalNumber); System.out.println("剩余盖子数:" + lastConverNumber); System.out.println("剩余瓶子数:" + lastBottleNumber); } public static void buy(int money){ int buyNumber = money / 2; totalNumber += buyNumber; int coverNumber = lastConverNumber + buyNumber; int bottleNumber = lastBottleNumber + buyNumber; int allMoney = 0; if(coverNumber >= 4) { allMoney += (coverNumber / 4) * 2; } lastConverNumber = coverNumber % 4; if(bottleNumber >= 2) { allMoney += (bottleNumber / 2) * 2; } lastBottleNumber = bottleNumber % 2; if(allMoney >= 2) { buy(allMoney); } } }UDP通信
特点:无连接,不可靠通信。
不事先建立连接,发送端每次把要发送的数据(限制在64kb内),接收端IP等信息封装成一个数据包,发出去就不管了。
java提供了一个java.net.DatagramSocket类来实现UDP通信。