Java 将依赖文本文件添加到JAR文件
我有一个JAR文件,它依赖于5个不同的文本文件。JAR文件读取文本文件并给出结果。我唯一的问题是我想隐藏文本文件,这样没人能看到它。请建议我如何将这些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具,因此文本文件隐藏在EXE中,那么这也是可以接受的。我建议您研究序列化作为一种可能的解决方案,这里有一个链接 我不是100%确定无论如何都不可能重建您的数据,但是。。。当你打开文件时,它的内容肯定会乱七八糟(即使你不想用它来做这个,无论如何,它都是非常有用的) 编辑:我想详细阐述一下abit,让你知道它的基本含义(如果你不知道的话)。。。假设您有一个包含对象的arraylist(需要保存的数据,如您自己的employee类或其他。通过序列化,您基本上可以将该列表序列化为一个文件,当您要加载数据时,只需将其反序列化即可。保存了数据的文件将包含任何打开该文件的人都会听到的胡言乱语。实际上,这比使用普通文件要容易得多,因为您需要通常必须处理读取每一行等。还请记住,您必须在需要使用的类中实现可序列化接口 下面是一个简单的示例,我使用一个非常简单的类testing,它只包含一个名称:Java 将依赖文本文件添加到JAR文件,java,jar,Java,Jar,我有一个JAR文件,它依赖于5个不同的文本文件。JAR文件读取文本文件并给出结果。我唯一的问题是我想隐藏文本文件,这样没人能看到它。请建议我如何将这些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具,因此文本文件隐藏在EXE中,那么这也是可以接受的。我建议您研究序列化作为一种可能的解决方案,这里有一个链接 我不是100%确定无论如何都不可能重建您的数据,但是。。。当你打开文件时,它的内容肯定会乱七八糟(即使你不想用它来做这个,无论如何,它都是非常有用的) 编辑:我想详细阐述一下a
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。文本文件是否可能以这种方式隐藏?