【问题标题】:Create a binary file in java在java中创建一个二进制文件
【发布时间】:2021-09-09 15:32:32
【问题描述】:

这些是可能导致我的问题被关闭的相关问题,即使我指定了另一个问题:

现在说到重点。我有一个具有特定扩展名的文件,更准确地说是.nbs。我想创建一个文件,然后将特定数据写入其中。
这可能听起来很模糊,所以让我向您展示我开始使用的代码。

try {
    File bpdn = new File(getDataFolder() + "song.nbs");
    if (!bpdn.exists()) {
        bpdn.createNewFile();
    }

    FileOutputStream fos = new FileOutputStream(bpdn);

} catch (IOException e) {
    e.printStackTrace();
}

我会为您提供更多详细信息。所以我有一个我过去为自己创建的song.nbs 文件。现在,每当有人运行我的应用程序时,我都想要它,所以会有一个新的song.nbs 文件,其中包含我现在在我的 PC 上的文件的确切内容。因此,我需要以某种方式获取现有 song.nbs 的字节,然后将它们复制并粘贴到我的 Java 应用程序中......或者是这样吗?我现在既不知道如何获取自己文件的字节,也不知道如何编写它们。

【问题讨论】:

    标签: java file io binary output


    【解决方案1】:

    您需要创建一个 resources 文件夹。更多信息here

    假设你的项目结构是

    ProjectName/src/main/java/Main.java
    

    您可以在 main/ 中创建一个 resources 文件夹:

    ProjectName/src/main/java/Main.java
    ProjectName/src/main/resources/
    

    将你想要阅读的song.nbs移到resources/中:

    ProjectName/src/main/java/Main.java
    ProjectName/src/main/resources/song.nbs
    

    现在,获取 song.nbsInputStream 存储在那里:

    final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    final InputStream is = classloader.getResourceAsStream("song.nbs");
    

    然后,将此输入流写入您的新文件:

    final File bpdn = new File(getDataFolder() + "song.nbs");
    if (!bpdn.exists()) bpdn.createNewFile();
    final FileOutputStream os = new FileOutputStream(bpdn);
    
    byte[] buffer = new byte[1024];
    int read;
    while ((read = is.read(buffer)) != -1) {
        os.write(buffer, 0, read);
    }
    

    【讨论】:

    • 我想你不明白。我不能输入任何东西。我只有一个文件,每当用户启动我的应用程序时,我都想克隆和创建它。我想我想出了一个解决方案
    • 我认为没听懂我的回答。只需将要复制的文件 A 放在 resources 文件夹中,使用 InputStream 获取其字节,创建要接收副本的文件 B 并使用 @987654330 将原始文件字节写入它@.
    • enzo,或许您可以解释一下,资源文件将(应该)编译到应用程序的 JAR 文件中,不需要单独分发。
    • 是的,你是对的。只要用户运行您的应用程序,您就可以使用ClassLoader 读取您要复制的文件。你可以在Accessing Resources阅读更多关于它的信息。
    【解决方案2】:

    我想我想出了一个解决方案,但我不确定这是否可行。如果您能看一下,我将不胜感激。

    try {
        File bpdn = new File(getDataFolder() + "badpiggiesdrip.nbs");
        if (!bpdn.exists()) {
            bpdn.createNewFile();
        }
    
        FileOutputStream fos = new FileOutputStream(bpdn);
        fos.write(new byte[] {
                Byte.parseByte(Arrays.toString(Base64.getDecoder().decode(Common.myString)))
        });
    
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    Common.myString 只是一个字符串,包含这种类型的数据:

    (byte) 0x21, (byte) 0x5a, .....
    

    它是用 Base64 编码的。

    【讨论】:

    • 这可行,但不是一个好的解决方案。再看看enzo's answer
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2011-10-13
    相关资源
    最近更新 更多