1 A.java
* 4 File获取功能
①:获取绝对路径
File getAbsoluteFile()
* String getAbsolutePath()
* ②:获取父目录,文件名(最后的一个的目录或者文件)
* String getParent()
* File getParentFile()
* String getName()
* ③:获取参数,最后一次修改文件时间,字节长度
* String getPath()
long lastModified()
long length()
5 File修改功能:
boolean renameTo(File dest)public class A {public static void main(String[] args) throws IOException { // method(); // method2(); // method3();method4();}private static void method4() {File f = new File("b/a.txt"); //将b文件夹下的a.txt修改为File f2 = new File("bae.txt"); //bae.txt,所以b文件夹下没有了a.txt,同时根目录下新增了bae.txt,文件里面的内容不会变//boolean renameTo(File dest) : 将当前File对象所指向的路径 修改为 指定File所指向的路径//注意:修改的文件路径不能存在,如果存在则修改失败System.out.println(f.renameTo(f2));}private static void method3() {File f = new File("a.txt");File f2 = new File("F:\\SoftProjects\\eclipse\\HanStudy\\ClassCode\\javaSe\\a\\b.txt");File f3 = new File("b");//String getName() : 获取文件和文件夹的名称System.out.println(f.getName());//a.txtSystem.out.println(f2.getName());//b.txtSystem.out.println(f3.getName());//bSystem.out.println("---------");//String getPath() : 返回创建File对象时给的路径,即参数System.out.println(f.getPath());System.out.println(f2.getPath());System.out.println(f3.getPath());System.out.println("---------");//long lastModified() : 以毫秒值的形式返回最后修改时间System.out.println(f.lastModified());//2514023311294Date d = new Date(1685012167594L);System.out.println(d.toLocaleString());System.out.println("---------");//long length() : 返回文件的字节数System.out.println(f.length());System.out.println(f2.length());}private static void method2() throws IOException {/* step1:File f = new File("a.txt");// String getName() System.out.println(f.getName()); // String getParent() --String对象System.out.println(f.getParent()); // File getParentFile() --File对象System.out.println(f.getParentFile());*/// step2: /* File f2 = new File("b","d.txt"); //如果目录不存在 ,那么创建失败System.out.println(f2.createNewFile());//创建b文件夹下的c.txtSystem.out.println(f2.getName());System.out.println(f2.getParent());System.out.println(f2.getParentFile());*/// step3: 一般都是这样用File parent = new File("b"); //如果目录不存在,那么会先创建目录File f3 = new File(parent,"c.txt");if(!parent.exists()) {parent.mkdirs();}System.out.println(f3.createNewFile());//String getName()System.out.println(f3.getName());//String getParent() System.out.println(f3.getParent());//File getParentFile() System.out.println(f3.getParentFile());}private static void method() {File f = new File("F:\\SoftProjects\\eclipse\\HanStudy\\ClassCode\\javaSe\\a\\b.txt");File f2 = new File("a.txt");//File getAbsoluteFile() :以File对象的形式返回当前File对象所有指向的绝对路径--FileSystem.out.println(f.getAbsoluteFile());//String getAbsolutePath() : 返回File对象所指向的绝对路径(返回的是一个String类型的字符串,只能调用String类的方法)--PathSystem.out.println(f.getAbsolutePath());//File getAbsoluteFile() :以File对象的形式返回当前File对象所有指向的绝对路径--FileSystem.out.println(f2.getAbsoluteFile());//String getAbsolutePath() : 返回File对象所指向的绝对路径(返回的是一个String类型的字符串,只能调用String类的方法)--PathSystem.out.println(f2.getAbsolutePath());}}
2. B.java
* 数组形式的获取File
String[] list() : 返回当前路径下所有的文件和文件夹名称(String对象数组
File[] listFiles() :返回当前路径下所有的文件和文件夹名称(file对象数组
static File[] listRoots() :返回的是当前计算机的所有盘符public class B {public static void main(String[] args) { // method(); // method2();method3();}private static void method3() {// static File[] listRoots() : 返回的是当前计算机的所有盘符File[] files = File.listRoots();for (File file : files) {System.out.println(file);}}private static void method2() {File f = new File("b");File f2 = new File("F:\\SoftProjects\\eclipse\\HanStudy\\ClassCode\\javaSe\\a");File f3 = new File("a");//File[] listFiles() :返回的file对象数组//注意:只有指向文件夹的File对象才可以调用该方法File[] files = f3.listFiles(); for (File file : files) { // System.out.println(file);//这里的f3创建时参数是相对路径,所以输出也是相对路径,若是f2,则输出绝对路径。一般不这样用,直接使用遍历每个file对象后调用getName方法System.out.println(file.getName());}}private static void method() {File f = new File("b");File f2 = new File("F:\\SoftProjects\\eclipse\\HanStudy\\ClassCode\\javaSe\\a\\b.txt");File f3 = new File("a");//String[] list() : 返回当前路径下所有的文件和文件夹名称//注意:只有指向文件夹的File对象才可以调用该方法String[] files = f3.list();for (int i = 0; i < files.length; i++) {System.out.println(files[i]);}} }
3. C.java
* 需求:
输出指定目录下所有的java文件名(包含与不包含子目录下的java文件),非常实用,结合了递归,判断File到底是目录还是单纯的文件
*
* File[] listFiles() :返回当前路径下所有的文件和文件夹名称(file对象数组public class C {public static void main(String[] args) {File file = new File("src/day39"); // File file = new File("src"); //试method2//File f = new File("src\\com\\itjinling_01\\RecurrenceDemo.java"); // method(file);method2(file);}public static void method(File file) {if(file.isDirectory()) { //src/day39是一个目录File[] files = file.listFiles(); //获取src/day39目录下的所有文件以及文件夹for (File f : files) { //遍历文件数组//判断是否是文件对象if(f.isFile()) { //数组元素是否是文件if(f.getName().endsWith(".java")) { //文件是否是java结尾System.out.println(f.getName()); //是就返回java文件}}else if(f.isDirectory()){ //是一个目录对象method(f); //递归算法}}}}//输出指定目录下的所有java文件名(不包含子目录)--意思就是该目录下只能输出java文件,若是该目录下还有一个目录下是有java文件,那么java文件输出不了public static void method2(File file) {if(file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {//判断是否是文件对象if(f.isFile()) {if(f.getName().endsWith(".java")) {System.out.println(f.getName());}}}}}}
4.D.java
* 需求:删除指定的目录(包含子目录)
*
* 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录public class D {public static void main(String[] args) {File f = new File("b");method(f);}//删除指定目录下所有文件和目录public static void method(File file) {if(file.isDirectory()) {//干掉自己所有的子文件和子目录//获取所有的子文件和子目录File[] files = file.listFiles();for (File f : files) {if(f.isFile()) {//直接干掉文件System.out.println(f.getName()+"文件被删掉!");f.delete();}else if(f.isDirectory()) {//继续查看是否还有文件和子目录method(f);}}//文件夹-干掉自己System.out.println(file.getName()+"文件夹被删除");file.delete();}} }
5.E.java
* 1.回顾IO以及深入:
*
IO流分类:
根据流向(之前通过流向简单了解了一下输入输出)
输入流 读取数据 FileReader ( Reader)
输出流 写出数据 FileWriter ( Writer)
根据数据类型
字节流 (打开文件乱码的,如图片,视频音频等就用字节,因为底层都是二进制)
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流 (打开文件不是乱码,可以看懂,跟字符相关采用)
字符输入流 读取数据 Reader(FileReader )
字符输出流 写出数据 Writer( FileWriter )*
*
*2. 使用字符流复制文本文件(旧知识)
数据源 IODemo.java
目的地 d:\\IODemo.java
public class E {public static void main(String[] args) throws IOException {//创建字符输入流对象FileReader fr = new FileReader("src/day39/A.java");//创建字符输出流对象FileWriter fw = new FileWriter("B.java");//一次读写一个字符/*int ch;while((ch = fr.read()) != -1) {fw.write(ch);fw.flush();}*///一次读写一个字符数组,读完了就结束,没读完就继续循环int len;//用于存储读到的字符个数char[] chs = new char[2048]; //一次读取多少个长度到字符数组while((len = fr.read(chs)) != -1) { fw.write(chs,0,len);fw.flush();}//释放资源fw.close();fr.close();}}
6.F.java
* 1.使用字节流复制文本文件 ,同时他还可以传照片等非字符的文件
*
数据源 IODemo.java
目的地 d:\\a\\IODemo.javapublic class F {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fis = new FileInputStream("1.png"); //当然这里用简单的文本文件也行,我就是想试试图片//创建字节输出流对象FileOutputStream fos = new FileOutputStream("file/11.png");//一次读写一个字节/*int by;while((by = fis.read()) != -1) {fos.write(by);}*///一次读写一个字节数组int len;//存储读到的字节个数byte[] bys = new byte[2048];while((len = fis.read(bys)) != -1) {fos.write(bys,0,len);}//释放资源fos.close();fis.close();} }