最近有个需求是oss文件转换为本地文件压缩打包并返回
然后用createTempFile()创建文件有两个参数需要填写,一个是前缀,一个是后缀,这样默认填写的话会有一个问题,文件名是一个固定的前缀加随机数,组成的文件名称,这样不是我想要的,于是,下面解决办法,并附例子。
**例:File.createTempFile(“weisi”, “.docx”);
创建的文件名是这样的
/var/folders/09/xdtl04rn1bbb_s0gnlslfmkh0000gn/T/weisi.doc
**
weisi.doc这块的名字不能自定义
解决思想(是先获取到要更改文件的地址➡️获取原始文件地址带原始文件名称➡️要更改的文件地址➡️复制➡️删除原来的文件,最总搞定!)
网络url转为文件工具类
/** * 网络url转为文件 * * @param url 路径 * @param original 文件名称 * @return * @throws Exception */ public static File getFile(String original, String url) throws Exception { //对本地文件命名 String fileName = url.substring(url.lastIndexOf(".")); File file = null; URL urlfile; InputStream inStream = null; OutputStream os = null; try { file = File.createTempFile("weisi", fileName); //文件地址 String path = file.getPath(); //文件名称 String name = file.getName(); //文件存放路径(字符串截取weisi后面的内容) String weisi1 = path.substring(0, path.indexOf("weisi")); //原始文件地址带原始文件名称 File file1 = new File(path); //要更改的文件地址和文件名称 file = new File(weisi1 + original + fileName); //复制 FileUtils.copyFile(file1, file); //删除 file1.delete(); //下载 urlfile = new URL(url); inStream = urlfile.openStream(); os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = inStream.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) { os.close(); } if (null != inStream) { inStream.close(); } } catch (Exception e) { e.printStackTrace(); } } return file; }
只听到从知秋君办公室传来知秋君的声音: 摽有梅,其实三兮。有谁来对上联或下联?
核心是解决办法***************************
此代码由一叶知秋网-知秋君整理//文件地址 String path = file.getPath(); //文件名称 String name = file.getName(); //文件存放路径(字符串截取weisi后面的内容) String weisi1 = path.substring(0, path.indexOf("weisi")); //原始文件地址带原始文件名称 File file1 = new File(path); //要更改的文件地址和文件名称 file = new File(weisi1 + original + fileName); //复制 FileUtils.copyFile(file1, file); //删除 file1.delete();
附上压缩文件的工具类:
public class ZipUtils { /** * 网络url转为文件 * * @param url 路径 * @param original 文件名称 * @return * @throws Exception */ public static File getFile(String original, String url) throws Exception { //对本地文件命名 String fileName = url.substring(url.lastIndexOf(".")); File file = null; URL urlfile; InputStream inStream = null; OutputStream os = null; try { file = File.createTempFile("weisi", fileName); //文件地址 String path = file.getPath(); //文件名称 String name = file.getName(); //文件存放路径(字符串截取weisi后面的内容) String weisi1 = path.substring(0, path.indexOf("weisi")); //原始文件地址带原始文件名称 File file1 = new File(path); //要更改的文件地址和文件名称 file = new File(weisi1 + original + fileName); //复制 FileUtils.copyFile(file1, file); //删除 file1.delete(); //下载 urlfile = new URL(url); inStream = urlfile.openStream(); os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = inStream.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) { os.close(); } if (null != inStream) { inStream.close(); } } catch (Exception e) { e.printStackTrace(); } } return file; } /** * 把文件集合打成zip压缩包 * * @param srcFiles 压缩文件集合 * @param zipFile zip文件名 * @throws RuntimeException 异常 */ public static void toZip(List<File> srcFiles, File zipFile) throws IOException { if (zipFile == null) { return; } if (!zipFile.getName().endsWith(".zip")) { return; } ZipOutputStream zos = null; FileOutputStream out = new FileOutputStream(zipFile); try { zos = new ZipOutputStream(out); for (File srcFile : srcFiles) { byte[] buf = new byte[BUFFER_SIZE]; zos.putNextEntry(new ZipEntry(srcFile.getName())); int len; // 读取文件并写入到zip中 FileInputStream in = new FileInputStream(srcFile); while ((len = in.read(buf)) != -1) { zos.write(buf, 0, len); zos.flush(); } in.close(); } } catch (Exception e) { e.printStackTrace(); } finally { if (zos != null) { zos.close(); } } } public static void downloadZip(OutputStream outputStream, List<File> fileList) { BufferedInputStream bufferedInputStream = null; ZipOutputStream zipOutputStream = null; try { zipOutputStream = new ZipOutputStream(outputStream); for (File file : fileList) { ZipEntry zipEntry = new ZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); byte[] buf = new byte[BUFFER_SIZE]; int len; FileInputStream in = new FileInputStream(file); while ((len = in.read(buf)) != -1) { zipOutputStream.write(buf, 0, len); zipOutputStream.flush(); } } zipOutputStream.flush(); zipOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭流 try { if (bufferedInputStream != null) { bufferedInputStream.close(); } if (zipOutputStream != null) { zipOutputStream.close(); } if (outputStream != null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }