Java根据byte数组,生成文件(根据后缀名可以生成bin,xml,java等)

该博客分享了一个Java工具类,用于将byte数组转换并保存为BIN文件。博主指出,若转换后的文件无法正常打开,可能是原始数据需要转换。建议通过读取源文件的byte流并使用工具类生成目标文件来验证工具的正确性。个人使用该工具类成功生成了BIN文件。
部署运行你感兴趣的模型镜像

前言

最近需要实现功能:
byte数组转为bin文件存储
找到一篇使用方便的:

Java根据byte数组,生成文件
转载关键内容如下:

工具类

package com.seesun2012.utils;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *根据byte数组,生成文件
 *
 * @author seesun2012@163.com
 *
 */
public class FileUtil {

	/**
     * 根据byte数组,生成文件
     * filePath  文件路径
     * fileName  文件名称(需要带后缀,如*.jpg、*.java、*.xml)
     */
    public static void getFile(byte[] bfile, String filePath,String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在
                dir.mkdirs();
            }
            file = new File(filePath + File.separator + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bfile);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }

}

结语

使用了一次可行。
在这篇博文下方有些回复认为: 写出的文件无法打开,提示文件已损坏怎么解决?
对此我的认知为需要从原始数据角度考虑,可能他们存入的数据需要进行转换,可以通过获取一个文件的byte流再用上述这个工具类生成目标文件来验证此工具类是否可用。
(但是我自己没做验证,因为我只需要bin文件,bin文件转换是成功的)

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>首先,用户的问题是:对面传过来的文件名称没有后缀名,那我怎么判断类型。我需要用中文回答。 我的回答必须包括: 1. 回答用户的问题。 2. 在回答结束后,提出3-5个相关问题。 3. 相关问题必须以"§§相关问题§§"开头,并且这是第一行,不能换行分散。 4. 相关问题必须基于用户的问题和我的回答。 用户的问题是关于如何判断没有后缀名文件类型。文件没有后缀名时,我们需要依赖其他方法来识别文件类型。 关键方法: - **内容分析**:读取文件内容的前几个字节(魔数或文件签名)来识别文件类型。例如,JPEG文件以`FF D8 FF`开头,PDF以`%PDF`开头。 - **MIME类型检测**:使用库如Apache Tika、Linux的`file`命令,或编程语言中的MIME类型检测函数。 - **文件内容解析**:尝试解析文件内容,例如用文本编辑器查看文本文件,或用图像库加载图像文件。 - **编程实现**:在代码中实现类型检测,比如在Java中使用Tika,在Python使用`python-magic`或`mimetypes`库。 我将提供一个示例代码来展示如何检测文件类型。用户提到的是Java环境(从之前的上下文有`String fileName = file.getOriginalFilename().toLowerCase();`),所以我应该用Java示例。 示例代码结构: - 使用Apache Tika库来检测文件类型。 - 包括依赖添加和代码片段。 回答结构: 1. 解释为什么需要内容检测。 2. 列出常见方法。 3. 提供代码示例。 4. 给出预防或最佳实践建议。 然后,提出相关问题: - 必须3-5个。 - 基于用户的问题和我的回答。 - 以"§§相关问题§§"开头,不换行。 相关问题想法: 1. 如何在没有外部库的情况下检测文件类型? 2. 文件签名检测的准确率有多高? 3. 处理大文件时如何优化类型检测性能? 4. 在Spring Boot中如何集成文件类型检测? 5. 文件类型检测失败时如何处理? 确保总输出符合规则:回答后直接是"§§相关问题§§",然后列表相关问题。 完整输出格式: [回答内容] §§相关问题§§ 1. ... 2. ... 3. ...</think>当文件名没有后缀时,可以通过分析文件内容而非文件名来判断类型。以下是核心方法及实现: ### 核心判断方法 1. **文件签名(魔数)检测** 读取文件前几个字节(通常 8-64 字节),匹配已知文件类型的二进制签名。例如: - JPEG: `FF D8 FF` - PNG: `89 50 4E 47` - PDF: `25 50 44 46`(%PDF) 2. **MIME 类型检测** 使用专业库分析文件内容特征(如 HTTP 的 `Content-Type`)。 3. **内容结构解析** 对文本文件检查编码(UTF-8/ASCII),对结构化数据(如 XML/JSON)验证语法。 --- ### 代码实现(Java 示例) #### 方案 1:基于文件签名(无需外部库) ```java import java.io.*; public class FileTypeDetector { public static String detectType(File file) throws IOException { try (InputStream is = new FileInputStream(file)) { byte[] header = new byte[8]; if (is.read(header) != header.length) return "UNKNOWN"; // 匹配常见文件签名 if (startsWith(header, new byte[]{(byte)0xFF, (byte)0xD8, (byte)0xFF})) return "image/jpeg"; if (startsWith(header, new byte[]{(byte)0x89, 0x50, 0x4E, 0x47})) return "image/png"; if (startsWith(header, "%PDF".getBytes())) return "application/pdf"; // 添加更多签名... } return "UNKNOWN"; } private static boolean startsWith(byte[] array, byte[] prefix) { if (array.length < prefix.length) return false; for (int i = 0; i < prefix.length; i++) { if (array[i] != prefix[i]) return false; } return true; } } ``` #### 方案 2:使用 Apache Tika(推荐,支持 1,500+ 文件类型) ```java // Maven 依赖:org.apache.tika:tika-core import org.apache.tika.Tika; public String detectWithTika(byte[] fileBytes) throws IOException { Tika tika = new Tika(); return tika.detect(fileBytes); // 返回 MIME 类型,如 "image/png" } // 在 Spring Boot 控制器中使用 public ResponseEntity<String> upload(MultipartFile file) { String realType = new Tika().detect(file.getBytes()); System.out.println("真实类型:" + realType); // 例如 "application/vnd.openxmlformats-officedocument.wordprocessingml.document" } ``` ### 最佳实践 1. **优先使用 Tika 等库**:手动维护签名成本高,Tika 覆盖范围广(包括 ZIP、Office 等复合格式)。 2. **安全限制**: - 限制检测文件大小(避免读取超大文件) - 对无类型文件隔离处理 3. **兼容性处理**: 当检测失败时,根据业务逻辑默认处理(如设为 `.bin` 或拒绝上传)。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值