java语法基础 - 第七部分 - File,Properties,Path,Files

1. 文件

1.1 File
1.1.1 方法讲解

唯一与文件、文件目录本身有关的操作类 – 表示文件、目录路径名的抽象表示

多级目录不会创建,返回false
目录已存在,不会把目录内的文件清空
File方法
createNewFile():创建新文件
mkdir():创建单级目录
mkdirs():创建多级目录
delete():删除文件、目录(目录中只能为空才能删除成功)
isDirectory()、isFile():判断是否是目录、文件
exists():文件、目录是否存在

  创建文件、目录方式

//方法1 
File file1 = new File("C:/Users/lrc/Desktop/a")
File file2 = new File("C:/Users/lrc/Desktop/a/b"

//方法2 --  File.separatorChar = "/"
File file1 = new File("C:"+ File.separatorChar +"Users/lrc/Desktop/a")


file1.createNewFile()   //  创建文件
file2.mkdir()            // 创建目录   -- 多级目录不会创建,并返回false
file2.mkdirs()         // 创建多级目录 -- 常用这个

非目录返回null
非目录返回null
目录则返回不确定值
返回毫秒,需自行使用Data转型
File方法
list():列出当前目录下的所有文件、目录名 → String[]
listFiles():列出当前目录下的所有File对象 → File[]
listFiles( FileFilter ):返回符合FileFilter的文件 → File[]
length():文件的占用空间
isHidden()、canRead():是否可读、可写
lastModified():最后修改时间( 毫秒 )


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rvLrVhOi-1574619189049)(en-resource://database/10437:1)]

  方法测试


class exeFilter implement FileFilter {
    @Override
    public boolean accept( File file ) {
        return file.getPath().endsWith(".exe");
    }
}



File file = new File( "E:\Git\Git" );

File[] files = file.listFiles( new exeFilter() );

for( File f : files ) {
    System.out.println( f.getName() );
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ebIYKSm0-1574619189056)(en-resource://database/10439:1)]

File方法
getPath()、getAbsolutePath():返回相对、绝对路径
renameTo( File ):文件、目录重命名 以及 剪切到实参指定路径

  方法测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OD1KdDph-1574619189060)(en-resource://database/10441:1)]

File file = new File("helloTest.txt");

String relativePath = file.getPath();    //  相对Java项目下的路径
String absolutePath = file.getAbsolutePath();   // 电脑硬盘上真实完整的路径的

System.out.println( relativePath );          
System.out.println( absolutePath );

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bISjLgGy-1574619189069)(en-resource://database/10443:1)]

1.1.2 具体应用
1.1.2.1 查找某个目录下的某个文件
class FileTest {
    
    private static  List<File> filesList = new ArrayList<File>();

    public static void searchFile(File file, String target_fileName) {
        // 1. 列出当前目录下的所有文件
        File[] files = file.listFiles();
        
        // 2. 循环迭代判断是否跟目标文件名相同
        for(File f : files) {
           
           // 3. 如果是目录,则进入此目录查找,是文件,则判断是否是以查找的文件名查找
           if(f.isDirectory()) {
                searchFile(f, target_fileName);
            }else {
                if( f.getPath().endsWith(target_fileName) )
                    filesList.add(f);    // 一旦查找到相同则放入静态列表中
            }
        }
    }
    
    // 4. 将查找到的文件以File[]输出,并且清空filesList容器中的文字,方便下次查找
    public static Object[] getFiles() {
        Object[] files = filesList.toArray();   
        filesList.clear();
        return files;
    }
}


//测试用例  --  结果如下图
File directory = new File( "E:\\Git\\Git" );
FileTest.searchFile( directory, "openssl.cnf" );
for( Object f : FileTest.getFiles() ) {
    System.out.println(f);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwsU0QYj-1574619189071)(en-resource://database/10445:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ueKioWKz-1574619189078)(en-resource://database/10447:1)]

1.2 Properties - 可读写配置文件

Properties 就是个 Hashtable<Object, Object>

常用到Java开发中(额好像这句是废话)
代码可从一个配置文件中读取信息,到时只需要更改文件内容,即可动态的改变程序获取的值,例如:Connection的连接信息,把其放置在配置文件上

获取配置文件数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWPgfguN-1574619189082)(en-resource://database/10449:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7YPcY8x-1574619189086)(en-resource://database/10451:1)]


  简单使用 - 获取配置文件的数据

public static Hashtable<Object, Object> getProperties(String propertiesPath) {
    try {
        // 1. 将配置文件转为 字节流
        InputStream is = new FileInputStream(propertiesPath);

        // 2. 创建一个Properties对象
        Properties p = new Properties();

        // 3. 读取字节流 -- 并且将配置文件的键值对存到Hashtable中
        p.load(is);

        // 4. 关闭文件字节流
        is.close();

        return p;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } 
    return null;
}

// 测试代码
Hashtable data = getProperties("load.properties");
System.out.println(data);


  运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAjBemhE-1574619189096)(en-resource://database/10453:1)]

修改配置文件数据
public static void updateProperties(String propertiesPath, HashMap<String, String> datas) {
    try {

        // 1. 创建一个配置文件属性对象
        Properties p = new Properties();

        // 2. 将配置文件转为文件输入流 ---  不可在3步骤之前定义该配置文件的输出流
        InputStream is = new FileInputStream(propertiesPath);


        // 3. 读取字节流 -- 并且将配置文件的键值对存到Hashtable中
        p.load(is);

        // 4. 关闭文件字节流 - 记得先关输入流,在建该文件的输出流
        is.close();

        // 5. 将字节流文件 转为处理流 进行 设置 输入的文字编码
        OutputStream os = new FileOutputStream(propertiesPath);
        OutputStreamWriter osr = new OutputStreamWriter(os, "GBK");

        // 6. 将实参的Map转为 集合进来遍历数据更新
        Set<Map.Entry<String, String>> elements = datas.entrySet();
        for (Map.Entry<String, String> element : elements) {
            p.put(element.getKey(), element.getValue());
        }

        // 7. 将properties更新的数据写入到 配置文件propertiesPath中
        p.store(osr, "UpDate-Time: " + new Date());
        osr.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}



// 测试代码
 HashMap<String, String> datas = new HashMap<String, 
String>();
datas.put("year", "22");
 datas.put("name", "gcw");
 datas.put("school", "GDMU");
updateProperties("load.properties", datas);


  运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jF6URhU-1574619189099)(en-resource://database/10455:1)]

1.3. Path

代表文件的路径对象

获取Path对象
Paths.get( String, String... )
FileSystems.getDefault.getPath( String, String... )
FIle对象.toPath()

  代码示例

public static void main(String[] args) throws IOException {
    // 参数与参数之间自动根据当前系统的文件分隔符自动的增添
    Path path = Paths.get("C:\\Users\\lrc\\Desktop", "线程4,.java");
    System.out.println(path);

    Path path2 = FileSystems.getDefault().getPath("C:\\Users\\lrc\\Desktop", "线程4,.java");
    System.out.println(path2);

    File file = new File("C:\\Users\\lrc\\Desktop", "线程4,.java");
    Path path3 = file.toPath();
    System.out.println(path3);
}	

  运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNWZlzt7-1574619189103)(en-resource://database/10457:1)]

1.4 Files – 文件的操纵
1.4.1 简略

自己查看文档查看对应的方法

Paths方法
打开、复制、创建、删除、移动文件
写数据到文件
获取该文件对应的字节流、字符流
创建链接、符号链接
读取文件的数据
获取、设置各种文件的属性
测试文件是否可进行某些操作

1.4.2 常用方法介绍
Files常用方法
write( Path, byte[], OpenOption ) - 往文件写入数据
readAllBytes( Path ) -- 读取文件所有字节
copy( 源Path, 复制Path, CopyOption ) -- 复制文件
move( 源Path, 移动Path, CopyOption ) -- 移动、修改文件名
delete( path ) -- 删除文件,不存在抛出异常
deleteIfExists-- 删除文件,不存在不会抛出异常

  1. write( Path, byte[], OpenOption )

public static void appendContent(String targetPath, String content) {		
    try {
        // 1. 获取目标文件路径对象
        Path path = Paths.get(targetPath);

        // 2. 将content字符串转为 字节数组, 并将其转为 utf-8编码
        content = "\n" + content;
        byte[] datas = content.getBytes("utf-8");

        // 3. 将内容进行写入到对应的文件
        Files.write(path, datas, StandardOpenOption.APPEND);
    } catch (IOException e) {
        e.printStackTrace();
    }		
}

// 测试代码
String targetPath = "C:\\Users\\lrc\\Desktop\\测试.txt";
String content = "CSDN上的博客帮助了我很多,谢谢你们!";
appendContent( targetPath, content );


  测试代码运行后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-90xD3M0T-1574619189111)(en-resource://database/10461:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXkuHtkI-1574619189115)(en-resource://database/10463:1)]


  2. readAllBytes( Path )

public static String readContent(String targetPath) {
    try {
        Path path = Paths.get(targetPath);
        byte[] data = Files.readAllBytes(path);
        return new String(data, "utf-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;

}

//测试代码
String fileContent = readContent("C:\\Users\\lrc\\Desktop\\测试.txt");
System.out.println( fileContent );

  运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6S8UGRMU-1574619189117)(en-resource://database/10465:1)]


  3. copy( 源Path, 复制Path, CopyOption ) – 文件复制

public static void copyFile2(String sourcePath) {
    // 1. 获取源文件的Path对象
    Path sourPath = Paths.get(sourcePath);

    // 2. 复制的文件名 放在桌面上
    Path copyPath = Paths.get("C:\\Users\\lrc\\Desktop", sourPath.getName(sourPath.getNameCount()-1).toString());

    // 3. 开始复制
    try {
        Files.copy(sourPath, copyPath, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }
}


  move( 源Path, 移动Path, CopyOption )

public static void moveFile( String sourcePath ) {
    // 1. 获取源文件的Path对象
    Path sourPath = Paths.get(sourcePath);

    // 2. 移动文件 放在桌面上
    Path movePath = Paths.get("C:\\Users\\lrc\\Desktop", sourPath.getName(sourPath.getNameCount() - 1).toString());

    // 3. 移动文件
    try {
        Files.move(sourPath, movePath, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值