Java [Código 15] Métodos relacionados con la operación de archivos (obtener archivos, copiar archivos, crear carpetas, obtener archivos de imágenes, escribir datos en archivos, limpiar carpetas)

1. Descripción

Este es un método de herramienta compartido relacionado con la operación de archivos, principalmente con algunos pequeños puntos:

  • Los archivos más recientes no se analizan
  • Escriba archivos usando codificación fija

2.Detalles de la herramienta

Es posible que el método no sea universal, especialmente el paso final de limpiar la carpeta según los parámetros, que determina específicamente la ruta de la carpeta.

2.1 Obtener un número específico de listas de archivos según la ruta

Este método escaneará rootPathtodos los archivos bajo el código y fileCountobtendrá la cantidad especificada de archivos:

  • Se puede agregar filtrado de archivos (que contienen ciertas cadenas basadas en nombres de archivos)
  • No se puede utilizar en escenarios de subprocesos múltiples
    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 Copiar archivos

Este es un método muy común.

    /**
     * 复制文件
     *
     * @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 Crear carpetas basadas en parámetros

Se usa con mucha frecuencia y no se explicará nuevamente.

    /**
     * 根据参数创建文件夹
     *
     * @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 Obtener imágenes según la ruta de la imagen

Muestre la imagen en el navegador según la ruta de la imagen.

    /**
     * 根据图片路径获取图片
     *
     * @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);
    }

Método de llamada:

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

2.5 Archivos de salida según parámetros

Archivos de salida utilizando un formato de codificación fijo.

    /**
     * 根据参数输出文件
     *
     * @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 Limpiar carpetas según parámetros

El método actual tiene juicios específicos y no es un método general.

    /**
     * 根据参数清理文件夹
     *
     * @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. Resumen

Las operaciones relacionadas con archivos se utilizan con mucha frecuencia y se complementarán continuamente.

Supongo que te gusta

Origin blog.csdn.net/weixin_39168541/article/details/131601155
Recomendado
Clasificación