黑马程序员技术交流社区

标题: 【石家庄校区】Javaweb学习笔记干货 [打印本页]

作者: 859182973    时间: 2018-12-17 09:42
标题: 【石家庄校区】Javaweb学习笔记干货
本帖最后由 小石姐姐 于 2018-12-19 15:49 编辑

File类
java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。


抽象?abstract


java.io.File类
文件和目录路径名的抽象表示形式。
java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作
我们可以使用File类的方法
    创建一个文件/文件夹
    删除文件/文件夹
    获取文件/文件夹
    判断文件/文件夹是否存在
    对文件夹进行遍历
    获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法


重点:记住这三个单词
    file:文件
    directory:文件夹/目录
    path:路径




static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
    static char pathSeparatorChar 与系统有关的路径分隔符。


    static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
    static char separatorChar 与系统有关的默认名称分隔符。


    操作路径:路径不能写死了
    C:\develop\a\a.txt  windows
    C:/develop/a/a.txt  linux
    "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);//路径分隔符 windows:分号;  linux:冒号:


String separator = File.separator;
System.out.println(separator);// 文件名称分隔符 windows:反斜杠\  linux:正斜杠/








File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
第一个构造方法
参数:
    String pathname:字符串的路径名称
[HTML] 纯文本查看 复制代码
private static void show01() {
    File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
    System.out.println(f1);//重写了Object类的toString方法 C:\Users\itcast\IdeaProjects\shungyuan\a.txt


    File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
    System.out.println(f2);//C:\Users\itcast\IdeaProjects\shungyuan


    File f3 = new File("b.txt");
    System.out.println(f3);//b.txt

    路径可以是以文件结尾,也可以是以文件夹结尾
    路径可以是相对路径,也可以是绝对路径
    路径可以是存在,也可以是不存在
    创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况

第二个构造方法
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
参数:把路径分成了两部分
    String parent:父路径
    String child:子路径
好处:
    父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化


[HTML] 纯文本查看 复制代码
private static void show02(String parent, String child) {
    File file = new File(parent,child);
    System.out.println(file);
}
show02("c:\\","a.txt");//c:\a.txt
show02("d:\\","a.txt");//d:\a.txt



第三个构造方法
[HTML] 纯文本查看 复制代码
show03();
private static void show03() {
    File parent = new File("c:\\");
    File file = new File(parent,"hello.java");
    System.out.println(file);//c:\hello.java
}

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
参数:把路径分成了两部分
    File parent:父路径
    String child:子路径
好处:
     父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
     父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象


}




获取功能的方法File类获取功能的方法



  
public String getAbsolutePath()
返回此File的绝对路径名字符串。
  public String getAbsolutePath() :返回此File的绝对路径名字符串。
    获取的构造方法中传递的路径
    无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径
[HTML] 纯文本查看 复制代码
private static void show01() {
    File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
    String absolutePath1 = f1.getAbsolutePath();
    System.out.println(absolutePath1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txtFile f2 = new File("a.txt");
    String absolutePath2 = f2.getAbsolutePath();
    System.out.println(absolutePath2);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
}







- public String getPath() :
将此File转换为路径名字符串。


    public String getPath() :将此File转换为路径名字符串。
    获取的构造方法中传递的路径


    toString方法调用的就是getPath方法
    源码:
   

[HTML] 纯文本查看 复制代码
     public String toString() {
            return getPath();
        }
private static void show02() {
    File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
    File f2 = new File("a.txt");
    String path1 = f1.getPath();
    System.out.println(path1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
    String path2 = f2.getPath();
    System.out.println(path2);                //a.txt
  System.out.println(f1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
    System.out.println(f1.toString());
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
}

public String getName()  :
返回由此File表示的文件或目录的名称。
    public String getName()  :返回由此File表示的文件或目录的名称。
    获取的就是构造方法传递路径的结尾部分(文件/文件夹)


[HTML] 纯文本查看 复制代码
private static void show03() {
    File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
    String name1 = f1.getName();
    System.out.println(name1);                //a.txt


    File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
    String name2 = f2.getName();
    System.out.println(name2);                //shungyuan
}


public long length()  :
返回由此File表示的文件的长度。
    public long length()  :返回由此File表示的文件的长度。
    获取的是构造方法指定的文件的大小,以字节为单位
    注意:
        文件夹是没有大小概念的,不能获取文件夹的大小
        如果构造方法中给出的路径不存在,那么length方法返回0

[HTML] 纯文本查看 复制代码
private static void show04() {
    File f1 = new File("C:\\develop\\a\\1.jpg");
    long l1 = f1.length();
    System.out.println(l1);                        //780831字节


    File f2 = new File("C:\\develop\\a\\2.jpg");
    System.out.println(f2.length());        //0


    File f3 = new File("C:\\develop\\a");
    System.out.println(f3.length());
//0 文件夹没有大小概念的
}





演示


方法演示,代码如下:



[HTML] 纯文本查看 复制代码
public class FileGet {
    public static void main(String[] args) {
        File f = new File("d:/aaa/bbb.java");     
        System.out.println("文件绝对路径:"+f.getAbsolutePath());
        System.out.println("文件构造路径:"+f.getPath());
        System.out.println("文件名称:"+f.getName());
        System.out.println("文件长度:"+f.length()+"字节");


        File f2 = new File("d:/aaa");     
        System.out.println("目录绝对路径:"+f2.getAbsolutePath());
        System.out.println("目录构造路径:"+f2.getPath());
        System.out.println("目录名称:"+f2.getName());
        System.out.println("目录长度:"+f2.length());
    }
}
输出结果:
文件绝对路径:d:\aaa\bbb.java
文件构造路径:d:\aaa\bbb.java
文件名称:bbb.java
文件长度:636字节
目录绝对路径:d:\aaa
目录构造路径:d:\aaa
目录名称:aaa
目录长度:4096



java.io.File类: 文件和目录的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
         静态成员变量
    static String pathSeparator: 路径分隔符的字符串形式
    static char pathSeparatorChar: 路径分隔符的char形式
            Windows系统是 分号;  
        Linux系统是 冒号:
    static String separator: 文件名称分隔符的字符串形式
    static char separatorChar: 文件名称分隔符的char形式
            Window系统是 反斜杠\
        Linux系统是 正斜杠/
  构造方法(创建了File对象, 并将其指向该路径. 不会真正在磁盘上创建这个文件)
        File File(String pathname): 根据 路径字符串 封装一个File对象
        File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象
        File File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File对象
        常用获取方法
    String?getAbsolutePath(): 返回此File的绝对路径名字符串
    String?getPath(): 获取File对象的封装路径 (创建对象时传入的路径)
    String?getName(): 获取File对象的文件名或目录名
    long?length(): 获取File表示的文件大小的字节数 (不能获取目录的大小)
    常用判断方法
        boolean?exists(): 判断File对象代表的文件或目录是否实际存在
        boolean?isDirectory(): 判断File表示的是否为目录
        boolean?isFile(): 判断File表示的是否为文件
        常用创建删除方法
        boolean?createNewFile(): 当文件不存在时, 创建一个新的空文件
        boolean?delete(): 删除由此File表示的文件或目录. (删除目录时必须是空目录)
        boolean?mkdir(): 创建File表示的目录
        boolean?mkdirs(): 创建File表示的多级目录
         常用获取目录中内容的方法
        String[]?list(): 获取当前File目录下的所有子文件或目录的名字数组
        File[]?listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组
        File[] listFiles(FileFilter filter): 通过File对象过滤, 返回文件过滤器过滤后的File对象数组
        File[] listFiles(FilenameFilter filter): 通过File对象的文件名过滤, 返回文件过滤器过滤后的File对象数组


java.io.FileFilter接口: 用于File对象的过滤器
        boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入


java.io.FilenameFilter接口:
        boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入




File类遍历(文件夹)目录功能
    - public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
    - public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。


注意:
    list方法和listFiles方法遍历的是构造方法中给出的目录
    如果构造方法中给出的目录的路径不存在,会抛出空指针异常
    如果构造方法中给出的路径不是一个目录,也会抛出空指针异常




public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中






public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有的文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中
[HTML] 纯文本查看 复制代码
File f9 = new File("src\\PhaseTwo\\day8\\上午\\demo");
String[] list = f9.list();
for (String s : list) {
    System.out.println(s);
}
File[] files = f9.listFiles();
for (File file1 : files) {
    System.out.println(file1);
}
"."      或者".."或者"src\\PhaseTwo\\day8\\上午\\demo"
File f9 = new File(".");
String[] list = f9.list();
for (String s : list) {
    System.out.println(s);
}
File[] files = f9.listFiles();
for (File file1 : files) {
    System.out.println(file1)

}
;







    File类判断功能的方法
        - public boolean exists() :此File表示的文件或目录是否实际存在。
        - public boolean isDirectory() :此File表示的是否为目录。
        - public boolean isFile() :此File表示的是否为文件。


        public boolean isDirectory() :此File表示的是否为目录。
            用于判断构造方法中给定的路径是否以文件夹结尾
                是:true
                否:false
        public boolean isFile() :此File表示的是否为文件。
            用于判断构造方法中给定的路径是否以文件结尾
                是:true
                否:false
        注意:
            电脑的硬盘中只有文件/文件夹,两个方法是互斥
            这两个方法使用前提,路径必须是存在的,否则都返回false


//不存在,就没有必要获取
此File表示的文件或目录是否实际存在。
        用于判断构造方法中的路径是否存在
            存在:true
            不存在:false


//此File表示的是否为目录。              ("D:\\飞秋\\03-飞秋  (资料共享件).exe")
System.out.println(file.isDirectory());//       false
//此File表示的文件或目录是否实际存在("D:\\飞秋\\03-飞秋  (资料共享件).exe")
System.out.println(file.exists());//              true
//此File表示的是否为文件。              ("D:\\飞秋\\03-飞秋  (资料共享件).exe")
System.out.println(file.isFile());//              true




if判断语句


//判断file文件或目录是否实际存在。存在的话就打印输出
[HTML] 纯文本查看 复制代码
if (file.exists()){
    System.out.println(file.isDirectory());//                false
    System.out.println(file.exists());//                        true
    System.out.println(file.isFile());//                        true
}


//判断file是否为目录。存在的话就打印输出
[HTML] 纯文本查看 复制代码
if (file.isDirectory()){
    System.out.println(file.isDirectory());//             false
    System.out.println(file.exists());//                      true
    System.out.println(file.isFile());//                      true
}



//判断file表示的是否为文件。是文件就打印输出
[Java] 纯文本查看 复制代码
if (file.isFile()){
    System.out.println(file.isDirectory());//                false
    System.out.println(file.exists());//                        true
    System.out.println(file.isFile());//                        true
}
   
if (file.exists()){
    //判断file是否为目录
    if (file.isDirectory()){
        //正确的话输出路径
        System.out.println(file.getPath());
    }
    //判断file表示的是否为文件
    if (file.isFile()){
        //正确的话输出文件名字
        System.out.println(file.getName());
    }
}




字节流 字符串 API
IO流:
java.io.OutputStream抽象类: 字节输出流 (顶层类)
        // 成员方法
        void close() :释放资源
        void?flush() :刷新缓冲区(对于字节流来说没有作用)
        // 写字节的成员方法
        abstract void?write(int?b): 一次写一个字节 (参数是int是为了代码中写表示byte的整数方便不用强转)
        void?write(byte[]?b): 一次写一个字节数组
        void?write(byte[]?b,?int?off,?int?len): 一次写一个字节数组的一部分
        
java.io.FileOutputStream类: 文件字节输出流 (向文件写数据)
        // 构造方法
        FileOutputStream(String?name): 通过文件路径创建文件字节输出流
        FileOutputStream(File?file): 通过File对象创建文件字节输出流
        FileOutputStream(String?name, boolean append): 通过文件路径创建文件字节输出流, true可以续写
        FileOutputStream(File?file, boolean append): 通过File对象创建文件字节输出流, true可以续写
        
java.io.InputStream抽象类: 字节输入流 (顶层类)
        // 常用成员方法
        void?close(): 释放资源
        // 读数据的方法
        int?read(): 一次读一个字节. 读到文件末尾返回-1 (返回int也是为了代码编写方便)
        int?read(byte[]?b): 一次读一个字节数组. 读到的字节存放在参数中的字节数组中, 返回int值是本次读到的字节的个数. 读到文件末尾返回-1
   
java.io.FileInputStream类: 文件字节输入流
        // 构造方法
        FileInputStream(String?name): 使用文件路径创建文件字节输入流
        FileInputStream(File?file): 使用File对象创建文件字节输入流
        
java.io.Reader抽象类: 字符输入流 (顶层)
        // 常用成员方法
        void?close() :关闭此流并释放与此流相关联的任何系统资源
        // 读数据的方法
        int?read(): 一次读一个字符char, 返回读到的字符. 读到文件末尾返回-1  (返回int为了代码编写方便)
        int?read(char[]?cbuf): 一次读取一个字符数组char[]. 返回读取的字符个数. 读到文件末尾返回-1
   
java.io.FileReader类: 文件字符输入流
        // 构造方法
        FileReader(File?file): 根据File对象创建文件字符输入流
        FileReader(String?fileName): 根据File对象创建文件字符输入流
        
java.io.Writer抽象类: 字符输出流 (顶层类)
        // 常用成员方法
        abstract void?close(): 刷新缓冲区并释放资源
        abstract void?flush() :刷新缓冲区
        // 写
        void?write(int?c): 写一个字符 (int类型为了代码编写方便)
        void?write(char[]?cbuf): 写一个字符数组
        abstract void?write(char[]?b,?int?off,?int?len): 写一个字符数组的一部分
        void?write(String?str): 写一个字符串
        void write(String str, int off, int len): 写一个字符串的一部分
        
java.io.FileWriter类: 文件字符输出流
        // 构造方法
        FileWriter(File?file): 通过File对象创建文件字符输出流
        FileWriter(String?fileName): 通过文件路径创建文件字符输出流
        FileWriter(File?file, boolean append): 通过File对象创建文件字符输出流. 第二个参数为true可以续写
        FileWriter(String?fileName, boolean append): 通过文件路径创建文件字符输出流. 第二个参数为true可以续写
        
集合:
java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable
        // 构造方法
        Properties(): 创建一个Properties集合
        // 可以使用Map接口中的方法
        // 特有成员方法
        Object?setProperty(String?key,?String?value): 保存/替换键值对
        String?getProperty(String?key): 通过键获取值. 键不存在返回null
        Set<String> stringPropertyNames(): 返回键的集合
        void store(OutputStream out, String comments): 将集合数据用字节流写入文件(不能中文), 并写入注释
        void store(Writer writer, String comments): 将集合数据用字符流写入文件(可以中文), 并写入注释
        void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能读中文)
        void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以读中文)







i:intput输入(读取)把硬盘中(文件)的数据读取到内存中(Java程序)使用
0:output输出(写出)把内存中(Java程序)的数据读取到硬盘中(文件)保存
入和出都是相对于内存来说的
流:数据(字符,字节) 1个字符= 2个字节 1个字节=8个二进制

输入流                                         输出流
字节流                        字节输入流                                字节输出流
InputStream                                OutputStream
字符流                        字符输入流                                字符输出流
Reader                                        Writer







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2