Java File类的操作

Posted __NaCl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java File类的操作相关的知识,希望对你有一定的参考价值。

题目描述

A文件夹下面有多个子文件夹,然后子文件下后面有一些.jpg文件,要求把这些.jpg文件完全拷贝复制到B文件夹。

实现思路

先遍历循环A文件夹下的文件,然后找到符合.jpg的文件,放到一个列表中,然后再把列表中的jpg文件放到B文件夹上。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Picture {
    private static LinkedList<File> fileQueue= new LinkedList<>();
    private final String aPath="C:\Users\m088163\Pictures";
    private final String bPath="D:\temp";

    /**
     * 将源文件夹下所有的.jpg文件找到,并存在fileQueue 列表中。
     * @param path 需要查找文件的路径名
     * @param subStr 匹配的文件类型
     */
    public void FindJpg(String path,String subStr){
        File file=new File(path);
        File[] files=file.listFiles();
        for(int i=0;i<files.length;i++){
            if(files[i].isDirectory()){
                FindJpg(files[i].getAbsolutePath(),subStr);
            }
            if(files[i].getAbsolutePath().contains(subStr)){
                fileQueue.add(files[i]);
            }
        }
    }

    /**
     * 将fileQeueue中的jpg文件存在目标文件夹。
     * @param path
     * @throws Exception
     */
    public void moveJpg(String path) throws Exception{
        String myPath="";
        File newFile;
        for(File files:fileQueue){
            myPath=path+"\";
            myPath+=files.getName();
            System.out.println(files.getName());
            newFile=new File(myPath);
            if(newFile.exists()){
                System.out.println("创建文件失败"+newFile+"失败,目标文件已经存在");
            }
            if(!newFile.getParentFile().exists()){
                System.out.println("文件的根目录不存在,创建根目录");
                newFile.getParentFile().mkdir();
            }
            copyfile(files.getAbsoluteFile(),newFile);
        }
    }

    /**
     * 写入文件操作
     * @param fromDest
     * @param toDest
     * @throws Exception
     */
    public void copyfile(File fromDest,File toDest ) throws Exception{
        FileInputStream is =new FileInputStream(fromDest);
        FileOutputStream os =new FileOutputStream(toDest);
        byte[] b =new byte[1024];
        int temp=0;
        while((temp=is.read(b))!=-1){
            os.write(b,0,temp);
        }
        is.close();
        os.close();

    }
    public static void main(String[] args) {
        Picture picture = new Picture();
        picture.FindJpg(picture.aPath, ".jpg");
        try {
            picture.moveJpg(picture.bPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Picture {
    private static LinkedList<File> fileQueue= new LinkedList<>();
    private final String aPath="C:\Users\m088163\Pictures";
    private final String bPath="D:\temp";

    /**
     * 将源文件夹下所有的.jpg文件找到,并存在fileQueue 列表中。
     * @param path 需要查找文件的路径名
     * @param subStr 匹配的文件类型
     */
    public void FindJpg(String path,String subStr){
        File file=new File(path);
        File[] files=file.listFiles();
        for(int i=0;i<files.length;i++){
            if(files[i].isDirectory()){
                FindJpg(files[i].getAbsolutePath(),subStr);
            }
            if(files[i].getAbsolutePath().contains(subStr)){
                fileQueue.add(files[i]);
            }
        }
    }

    /**
     * 将fileQeueue中的jpg文件存在目标文件夹。
     * @param path
     * @throws Exception
     */
    public void moveJpg(String path) throws Exception{
        String myPath="";
        File newFile;
        for(File files:fileQueue){
            myPath=path+"\";
            myPath+=files.getName();
            System.out.println(files.getName());
            newFile=new File(myPath);
            if(newFile.exists()){
                System.out.println("创建文件失败"+newFile+"失败,目标文件已经存在");
            }
            if(!newFile.getParentFile().exists()){
                System.out.println("文件的根目录不存在,创建根目录");
                newFile.getParentFile().mkdir();
            }
            copyfile(files.getAbsoluteFile(),newFile);
        }
    }

    /**
     * 写入文件操作
     * @param fromDest
     * @param toDest
     * @throws Exception
     */
    public void copyfile(File fromDest,File toDest ) throws Exception{
        FileInputStream is =new FileInputStream(fromDest);
        FileOutputStream os =new FileOutputStream(toDest);
        byte[] b =new byte[1024];
        int temp=0;
        while((temp=is.read(b))!=-1){
            os.write(b,0,temp);
        }
        is.close();
        os.close();

    }
    public static void main(String[] args) {
        Picture picture = new Picture();
        picture.FindJpg(picture.aPath, ".jpg");
        try {
            picture.moveJpg(picture.bPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上是关于Java File类的操作的主要内容,如果未能解决你的问题,请参考以下文章

Java中Io流操作-File类的常用操作-创建文件,创建文件夹

Java File类的操作

java 代码片段

Java中File类的使用

Java File类的学习

java IO流 File类的使用