Java【代码 15】文件操作相关方法(获取文件、复制文件、创建文件夹

    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 复制文件


这个是非常常用的方法。



/\*\*

* 复制文件
*
* @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 根据参数创建文件夹


非常常用,不再解释。



/\*\*

* 根据参数创建文件夹
*
* @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 根据图片路径获取图片


根据图片路径将图片展示在浏览器。



/\*\*

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


调用方法:



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

### 2.5 根据参数输出文件


使用固定的编码格式输出文件。



/\*\*

* 根据参数输出文件
*
* @param filePath 文件路径
* @param data 数据对象
* @param size 写出的条数
*/
public static void writeDataToFile(String filePath, LinkedBlockingQueue 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 根据参数清理文件夹


当前方法有特定的判断,不是通用方法。



/\*\*

* 根据参数清理文件夹
*
* @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());
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值