将文件按照文件名创建文件夹保存

介绍

        场景:有一个图片的压缩包,里面的图片是按照系列存的。上传图片时需要按商品编号找到文件夹,进入文件夹选取里面的图片。所以写了下面的,按照文件名创建文件夹,然后把所有文件名的图片放进去,如果一个文件名有多个图片,则文件名按照后缀加-0,-1区别。例如,有一个商品图片,有3张,D304,分别存在3个文件夹中。经过处理后需要创建一个D304的文件夹,然后把3张图片存进去,名称分别为D304, D304-1,D304-2。

代码

实现代码如下:

package com.example.demoimg.test;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

public class CopyFilesToDirectories7 {

    public static final String nameList = "J313327, J313330";


    public static void main(String[] args) {
        // 源文件夹
        File sourceFolder = new File("C:\\Users\\yf01\\Documents\\img\\123");
        File[] files = sourceFolder.listFiles();

//        String name11 = "D8129";

        if (files != null) {
            for (File file : files) {
                getFile(file);
            }
        }

        System.out.println("Files copied to directories successfully.");
    }

    private static void getFile(File file) {
//        String name11 = "DG548129";
        if (file.isFile()) {


            String fileName = file.getName();
            String ssName = fileName.substring(0, fileName.lastIndexOf("."));


            if (!nameList.contains(ssName)) {
                return;
            }
//
            System.out.println("找到文件");




            String folderName = fileName.substring(0, fileName.lastIndexOf("."));
            // E:/destination_folder/
            File destinationFolder = new File("D:\\img2\\" + folderName);
            int index = 1;
            File destinationFile = new File("D:\\img2\\" + folderName+ "\\" + fileName);


            // 文件夹存在就处理文件名
            if (destinationFolder.exists()) {
                while (destinationFile.exists()) {
                    String baseName = fileName.substring(0, fileName.lastIndexOf("."));
                    String extension = fileName.substring(fileName.lastIndexOf("."));
                    String newFileName = baseName + "_" + index + extension;
                    destinationFile = new File("D:\\img2\\" + folderName+ "\\" + newFileName);
                    index++;
                }
            }else {

                destinationFolder.mkdirs();
            }

            try {
                Files.copy(file.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                System.err.println("Error copying file: " + e.getMessage());
            }
        }else if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File file2 : files) {
                    getFile(file2);
                }
            }
        }
    }
}

以下是网页下载图片的代码,没用

package com.example.demoimg.test;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.*;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class test1 {

    public static void main(String[] args) {
        for (int i = 2500; i <= 3000; i++) {
//            getImg(i);
        }

        System.out.println("完成");
    }

    private static void getss() {
        System.out.println("开始--" + 1);
        String url = "http://test.com/item.html?item_id=" + 1;

        try {
            Document doc = Jsoup.connect(url).get();

            Elements images = doc.select(".goods_box .show-box img");
            Elements ulElements = doc.select(".goods_gy ul");

            for (int j = 0; j < images.size(); j++) {
                Element img = images.get(j);
                Element ulElement = ulElements.get(0); // Assuming there is only one ul element

                String text = ulElement.text();
                int end = text.indexOf("<li>");
                String aliasValue = text.substring(end) + "j";

                String src = img.attr("src");
                System.out.println(aliasValue + "_" + j + ": " + src);
                // 下载图片到文件夹
                downLoadImg(src, aliasValue);
            }
        } catch (IOException e) {
            System.err.println("Error fetching images: " + e.getMessage());
        }
    }




    private static void getImg(int i) {
        System.out.println("开始--" + i);
        String url = "http://test.com/item.html?item_id=" + i;

        try {
            Document doc = Jsoup.connect(url).get();

            Elements images = doc.select(".goods_box .show-box img");
            Elements ulElements = doc.select(".goods_gy ul");

            for (int j = 0; j < images.size(); j++) {
                Element img = images.get(j);
                Element ulElement = ulElements.get(0); // Assuming there is only one ul element

                String text = ulElement.text();
                int end = text.indexOf("<li>");
                String aliasValue = text.substring(end) + "j";

                String src = img.attr("src");
                System.out.println(aliasValue + "_" + j + ": " + src);
                // 下载图片到文件夹
                downLoadImg(src, aliasValue);
            }
        } catch (IOException e) {
            System.err.println("Error fetching images: " + e.getMessage());
        }
    }

    public static void downLoadImg(String imageUrl, String fileName) {
//        imageUrl = "http://test/images/8c/29/af/e221b6a084179edcdd0f3875c2b404dc593e4bef.jpg_l.jpg";
        String folderPath = "D:/img/";
//        String fileName = "A112.jpg";

        try {
            URL url = new URL(imageUrl);
            InputStream in = url.openStream();

            Path outputPath = FileSystems.getDefault().getPath(folderPath, fileName);// Path.of(folderPath + fileName);
            Files.copy(in, outputPath, StandardCopyOption.REPLACE_EXISTING);

            System.out.println("图片下载成功");
        } catch (IOException e) {
            System.err.println("图片下载失败: " + e.getMessage());
        }
    }


    public static void download(String urlString, String savePath, String filename) throws IOException {
        // 构造URL
        URL url = new URL(urlString);
        // 打开连接
        URLConnection con = url.openConnection();
        //设置请求超时为20s
        con.setConnectTimeout(20 * 1000);
        //文件路径不存在 则创建
        File sf = new File(savePath);
        if (!sf.exists()) {
            sf.mkdirs();
        }
        //jdk 1.7 新特性自动关闭
        try (InputStream in = con.getInputStream();
             OutputStream out = new FileOutputStream(sf.getPath() + "\\" + filename)) {
            //创建缓冲区
            byte[] buff = new byte[1024];
            int n;
            // 开始读取
            while ((n = in.read(buff)) >= 0) {
                out.write(buff, 0, n);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤将MultipartFile保存到本地并自动创建文件: 1. 获取文件的字节数组:使用 `MultipartFile` 的 `getBytes()` 方法获取文件的字节数组。 2. 定义保存文件的路径:确定文件保存的路径和文件名。例如,您可以定义一个基础路径和一个根据时间戳生成的唯一文件名。 3. 创建目录:使用 Java 的 `File` 类的 `mkdirs()` 方法来创建目录。您可以使用基础路径和目录名称来构建完整的目录路径。 4. 创建文件:使用 `File` 类的 `createNewFile()` 方法在指定目录下创建新的空文件。 5. 写入文件内容:使用 Java 的 `FileOutputStream` 类将字节数组写入新创建的文件中。 下面是一个示例代码,演示了上述步骤的实现: ```java import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Paths; import java.time.Instant; public class FileUploader { public static void saveFile(MultipartFile multipartFile) throws IOException { byte[] fileBytes = multipartFile.getBytes(); String baseDirectory = "/path/to/base/directory"; String directoryName = Instant.now().toString(); // 可以根据需求使用其他方式生成目录名 String fileName = "example.txt"; String directoryPath = Paths.get(baseDirectory, directoryName).toString(); File directory = new File(directoryPath); directory.mkdirs(); // 创建目录及其父目录 String filePath = Paths.get(directoryPath, fileName).toString(); File file = new File(filePath); file.createNewFile(); // 创建新文件 FileOutputStream outputStream = new FileOutputStream(file); outputStream.write(fileBytes); outputStream.close(); } } ``` 请注意,在实际使用中,您可能需要根据自己的需求进行一些修改,例如更改基础路径、文件名生成方式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值