我目前正在编写一个程序,它接受用户输入并创建逗号分隔的.csv文件行。我需要一种以用户无法轻松编辑此数据的方式保存此数据的方法。它不需要非常安全,只需足以使其无法意外进行编辑。我还需要创建另一个文件(或相同的文件?),然后用户可以轻松访问(在文件系统中),以便他们可以将此文件通过电子邮件发送给系统管理员,然后系统管理员可以打开.csv文件。如有必要,我可以为第二个人提供转换计划。
我保存数据的文件和要发送的文件可以是两个不同的文件,如果有任何好处的话。我当前正在考虑使用具有奇怪文件扩展名的文件,但将其保存为文本文件,以便用户只有在知道尝试时才能打开它。另一种选择是某种加密,但我不确定这是否有必要,即使它是我要开始的地方。
感谢您的帮助:)
编辑:此文件用于存储输入的实际数据。目前,数据正在纸质表格上收集,然后发送给管理员以手动输入所有数据。这个小应用程序是为了让其他人从纸质表单中输入数据,然后告诉他们他们是否已正确输入。在他们输入之后,他们需要将数据发送给管理员。最好是自动处理发送,但这个应用程序需要非常简单和低预算,我不希望互联网连接是一个要求。
答案 0 :(得分:5)
您可以将数据存储在可序列化的对象中并保存。它会抵制随意编辑,并且可以非常简单地从您的应用程序进行读写。这个页面可以帮助您入门:http://java.sun.com/developer/technicalArticles/Programming/serialization/
答案 1 :(得分:1)
从你的问题来看,我猜测不可编辑文件的目的是存储某种系统配置,你不希望它容易搞砸。根据您自己的建议,似乎即使知道文件已被编辑也会对您有所帮助,因为您可以避免使用它。如果是这种情况,则可以使用简单检查,例如将行中的字符总数保存为第一个或最后一个逗号分隔值。然后,在使用该文件之前,您只需在其上运行一个小的验证代码,以验证该文件确实没有改变。
答案 2 :(得分:1)
另一种方法可能只是使用“纯文本格式”的ZIP(文件)(CSV,XML,其他序列化方法等),并且可选地使用众所周知的(给你)密码。
这种方法可以与其他流/包类型一起使用:使用ZIP(而不是直接对象序列化器)背后的想法是这样的,即可以轻松地打开/检查/修改所述数据/文件而无需特殊的计划支持。这可能是也可能不是好处,甚至可能需要使用密码,见下文。
使用ZIP(或CAB)的一些优点:
此外,使用非ZIP文件扩展名将阻止大多数用户随意关联文件(与原始帖子中显示的内容类似,但略有不同,因为ZIP格式本身不是“纯文本”) ZIP格式,并能够打开它。许多现代Microsoft格式利用文件扩展名起重要作用并使用CAB(有时是ZIP)格式作为文档的容器格式这一事实。也就是说,可以使用7-zip等工具打开“.XSN”或“.WSP”或“.gadget”文件 ,但通常只有“在...中”的开发人员才能这样做。知道”。另外,只考虑“.WAR”和“.JAR”文件作为此方法的其他示例,因为这是我们所在的Java。
传统的ZIP密码不安全,更多的是使用程序中嵌入的静态密码。但是,如果这只是一种威慑(例如不是“安全”),那么这些问题并不重要。加上一个“无关联”的文件类型/扩展,我相信这提供了问题中所要求的保护,同时保持灵活性。有可能完全放弃密码使用,并且仍然可以通过使用ZIP(或其他)容器格式来防止“意外修改”,具体取决于要求/期望。
快乐的编码。
答案 3 :(得分:0)
您可以设置文件权限以使其成为只读吗?
答案 4 :(得分:0)
除了执行二进制输出文件之外,Windows运行的文件系统(我知道它可以从XP到x64 Windows 7运行)有一个小技巧,您可以使用它来隐藏任何人只是简单地浏览文件的数据:
使用冒号然后添加任意值来附加输出和输入文件,例如,如果您的文件名是“data.csv”,则将其改为“data.csv:42”。可以附加任何现有或不存在的文件来访问整个隐藏区域(冒号后的每个值都是不同的,所以“data.csv:42”!=“data.csv:carrots”!=“ second.csv:胡萝卜“)
如果此文件不存在,它将被创建并初始化为具有0字节的数据。如果你在记事本中打开文件,你确实会看到它在写入:42文件之前完全保留它所保存的数据,不多也不少,但实际上后续数据从这个“data.csv:42”文件中读取会坚持下去。这使它成为隐藏任何烦人用户数据的理想场所!
注意事项:如果删除“data.csv”,则所有关联的隐藏数据也将被删除。此外,确实有程序可以找到这些文件,但是如果你的用户经历了所有麻烦来手动编辑一些csv文件,我会说让它们。
我也不知道这是否可以在其他平台上运行,我从未想过尝试过它。