Java [Code 15] File operation related methods (get files, copy files, create folders, get image files, write data to files, clean folders)

1. Description

This is a sharing of tool methods related to file operations, mainly with some small points:

  • The latest files are not scanned
  • Write out files using fixed encoding

2.Tool details

The method may not be universal, especially the final step of cleaning the folder based on parameters, which specifically determines the folder path.

2.1 Get a specified number of file lists based on the path

This method will scan rootPathall files under the code and fileCountobtain the specified number of files:

  • Filtering of files can be added (containing certain strings based on file names)
  • Cannot be used in multi-threaded scenarios
    private List<File> files = new ArrayList<>();

    /**
     * 根据路径获取指定数量的文件列表
     *
     * @param rootPath  目录
     * @param fileCount 数量
     * @return 文件列表
     */
    public List<File> getFiles(String rootPath, int fileCount) {
    
    
        List<File> fileList = new ArrayList<>();
        Path rootDir = Paths.get(rootPath);
        try {
    
    
            DirectoryStream<Path> paths = Files.newDirectoryStream(rootDir);
            for (Path path : paths) {
    
    
                File file = path.toFile();
                if (file.isDirectory()) {
    
    
                    fileList.addAll(getFiles(file.getAbsolutePath(), fileCount - fileList.size()));
                } else {
    
    
                    if (files.contains(file)) {
    
    
                        continue;
                    }
                    if (System.currentTimeMillis() - file.lastModified() < 10000) {
    
    
                        continue;
                    }
                    files.add(file);
                    fileList.add(file);
                }
                if (fileList.size() >= fileCount) {
    
    
                    break;
                }
            }
            paths.close();
            files.clear();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return fileList;
    }

2.2 Copy files

This is a very common method.

    /**
     * 复制文件
     *
     * @param sourceFile 源文件
     * @param targetFile 目标文件
     * @return 是否复制成功
     */
    public boolean fileCopyToNewFile(File sourceFile, File targetFile) {
    
    
        boolean success = false;
        try {
    
    
            FileUtils.copyFile(sourceFile, targetFile);
            success = true;
        } catch (IOException e) {
    
    
            e.printStackTrace();
            log.error("fileCopyToNewFile Failed!");
        }
        return success;
    }

2.3 Create folders based on parameters

It is very commonly used and will not be explained again.

    /**
     * 根据参数创建文件夹
     *
     * @param dirPath  文件夹路径
     * @param describe 文件夹描述
     */
    public void creatDirByParam(String dirPath, String describe) {
    
    
        // 获取文件夹路径
        File file = new File(dirPath);
        // 判断文件夹是否创建,没有创建则创建新文件夹
        if (!file.exists()) {
    
    
            if (file.mkdirs()) {
    
    
                log.info(" - - - - - - 创建{} [{}] - - - - - - ", describe, dirPath);
            }
        }
    }

2.4 Get images based on image path

Display the image in the browser according to the image path.

    /**
     * 根据图片路径获取图片
     *
     * @param imagePath 图片路径
     * @return 图片数据
     */
    public ResponseEntity<byte[]> getImageByPath(String imagePath) {
    
    
        File file = new File(imagePath);
        byte[] imageBytes = {
    
    };
        try {
    
    
            imageBytes = Files.readAllBytes(file.toPath());
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_JPEG);
        return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
    }

Calling method:

    @GetMapping(value = "/getImageByImagePath", produces = "application/json;charset=UTF-8")
    public Map<String, Object> getImageByImagePath(String pic) {
    
    
        return getImageByImagePath(pic);
    }

2.5 Output files according to parameters

Output files using a fixed encoding format.

    /**
     * 根据参数输出文件
     *
     * @param filePath 文件路径
     * @param data     数据对象
     * @param size     写出的条数
     */
    public static void writeDataToFile(String filePath, LinkedBlockingQueue<String> data, int size) {
    
    
        try {
    
    
            // 创建 BufferedWriter 对象,提高写入性能
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), StandardCharsets.UTF_8));
            // 写入数据
            for (int i = 0; i < size; i++) {
    
    
                bufferedWriter.write(data.take());
                if (i < size - 1) {
    
    
                    // 写入换行符
                    bufferedWriter.newLine();
                }
            }
            // 关闭资源
            bufferedWriter.close();
            log.info("------writeDataToFile [{}] 条!------", size);
        } catch (IOException | InterruptedException e) {
    
    
            log.error("------writeDataToFile Failed [{}]------", e.getMessage());
        }
    }

2.6 Clean folders according to parameters

The current method has specific judgments and is not a general method.

    /**
     * 根据参数清理文件夹
     *
     * @param rootPath 根目录
     * @param keepDays 保存日期
     */
    public void deleteFolderByParam(String rootPath, int keepDays) {
    
    
        try {
    
    
            String currentDay = DateUtil.format(DateUtil.offsetDay(new Date(), -keepDays), "yyyyMMdd");
            int currentDayInt = Integer.parseInt(currentDay);
            File[] devPathArr = new File(rootPath).listFiles();
            if (devPathArr != null && devPathArr.length > 0) {
    
    
                for (File devPath : devPathArr) {
    
    
                    if (devPath.isDirectory()) {
    
    
                        File[] dayPathArr = devPath.listFiles();
                        if (dayPathArr != null && dayPathArr.length > 0) {
    
    
                            for (File dayPath : dayPathArr) {
    
    
                                if (dayPath.isDirectory()) {
    
    
                                    int dirName = Integer.parseInt(dayPath.getName());
                                    if (dirName < currentDayInt) {
    
    
                                        File[] files = dayPath.listFiles();
                                        if (files != null && files.length > 0) {
    
    
                                            for (File file : files) {
    
    
                                                FileUtils.delete(file);
                                                log.info("deleteFolder[{}]file[{}]", dirName, file.getName());
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
    
    
            log.error("deleteFolderByParam Failed! [{}]", e.getMessage());
        }
    }

3. Summary

File-related operations are very commonly used and will be continuously supplemented.

Guess you like

Origin blog.csdn.net/weixin_39168541/article/details/131601155
Recommended