Java 将依赖文本文件添加到JAR文件

Java 将依赖文本文件添加到JAR文件,java,jar,Java,Jar,我有一个JAR文件,它依赖于5个不同的文本文件。JAR文件读取文本文件并给出结果。我唯一的问题是我想隐藏文本文件,这样没人能看到它。请建议我如何将这些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具,因此文本文件隐藏在EXE中,那么这也是可以接受的。我建议您研究序列化作为一种可能的解决方案,这里有一个链接 我不是100%确定无论如何都不可能重建您的数据,但是。。。当你打开文件时,它的内容肯定会乱七八糟(即使你不想用它来做这个,无论如何,它都是非常有用的) 编辑:我想详细阐述一下a

我有一个JAR文件,它依赖于5个不同的文本文件。JAR文件读取文本文件并给出结果。我唯一的问题是我想隐藏文本文件,这样没人能看到它。请建议我如何将这些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具,因此文本文件隐藏在EXE中,那么这也是可以接受的。

我建议您研究序列化作为一种可能的解决方案,这里有一个链接

我不是100%确定无论如何都不可能重建您的数据,但是。。。当你打开文件时,它的内容肯定会乱七八糟(即使你不想用它来做这个,无论如何,它都是非常有用的)

编辑:我想详细阐述一下abit,让你知道它的基本含义(如果你不知道的话)。。。假设您有一个包含对象的arraylist(需要保存的数据,如您自己的employee类或其他。通过序列化,您基本上可以将该列表序列化为一个文件,当您要加载数据时,只需将其反序列化即可。保存了数据的文件将包含任何打开该文件的人都会听到的胡言乱语。实际上,这比使用普通文件要容易得多,因为您需要通常必须处理读取每一行等。还请记住,您必须在需要使用的类中实现可序列化接口

下面是一个简单的示例,我使用一个非常简单的类testing,它只包含一个名称:

public class Testing implements Serializable {

    private String name;

    public Testing(String name) {
        this.setName(name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
现在,要序列化此类的对象,请记住,您也可以使用对象的arraylist来实现,但它在静态上下文中不起作用!因此您不能在主方法fx中测试它

        File file = new File("test.dat");
        if (!file.exists()) file.createNewFile();

        try {
            ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("test.dat"));
            out.writeObject(new Testing("testobject"));
        } catch(Exception ex) {}


        try {
            ObjectInputStream in = new ObjectInputStream( new FileInputStream("test.dat"));
            Testing loadedObject = (Testing) in.readObject();
            System.out.println( loadedObject.getName() );
        } catch(Exception ex){}
上面的代码可以在一个main方法中进行测试,如果您想看到它的运行,只需复制粘贴它并导入所需的内容


编辑:应该提到的是,我读过一篇文章,在序列化对象之前,可以使用一个简单但安全的加密方法,通过使用包装类。但是你必须仔细阅读,尽管在我看来,这是一个非常优雅的解决方案。

你可以“隐藏”jar中的文件,但它们仍然可以访问。只要解压缩jar就可以了我提供对其内容的访问。如果这些文件是“敏感”的,我建议对它们进行加密

密码学本身是一个广泛的主题,需要真正理解才能创建安全的解决方案,但下面有一个使用java加密和解密数据的基本示例

编辑

该链接建议使用以下内容:

生成“aesKey”的代码相同:

 String key = "Bar12345Bar12345"; // 128 bit key
 // Create key and cipher
 Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
 Cipher cipher = Cipher.getInstance("AES");
要加密字符串,请执行以下操作:

    // encrypt the text
     String toEncrypt = "Your text.";
     cipher.init(Cipher.ENCRYPT_MODE, aesKey);
     byte[] encryptedBytes = cipher.doFinal(toEncrypt.getBytes());
     String encrypted = new String(encryptedBytes);
     // decrypt the text
     cipher.init(Cipher.DECRYPT_MODE, aesKey);
     String decrypted = new String(cipher.doFinal(encrypted.getBytes()));
要解密字符串,请执行以下操作:

    // encrypt the text
     String toEncrypt = "Your text.";
     cipher.init(Cipher.ENCRYPT_MODE, aesKey);
     byte[] encryptedBytes = cipher.doFinal(toEncrypt.getBytes());
     String encrypted = new String(encryptedBytes);
     // decrypt the text
     cipher.init(Cipher.DECRYPT_MODE, aesKey);
     String decrypted = new String(cipher.doFinal(encrypted.getBytes()));

文件中的存储文本将是完全不可理解的。还有其他事情要考虑;例如,如果将密钥存储在一个类中,则可以提取它。但是,在所有安全措施中,创建它的复杂性必须与反其所涉及的困难相平衡。关于您正在获取的信息的性质


如果您只是想将文本文件打包到jar中,并且它们的安全性不是问题,请参阅以下内容(假设您使用的是eclipse):


我假设这是您的代码,您自己创建的jar文件?请发送JAVA解密代码给我,因为您提供的链接只包含加密代码。我们根据提供的链接添加了代码示例。感谢您提供的解决方案。现在,如果我将文本文件打包到jar中,然后使用一些jar-to-exe工具将我现有的jar转换为exe。文本文件是否可能以这种方式隐藏?