我有一个可以保存一些文件的应用。当用户关闭应用时,我想要保存,如果,则用户尚未保存文件,因为它是最新的。
如果我不够清楚,我想知道是否从上次保存中修改了文件。
我已经考虑过如果文件被保存则转换为Boolean
的{{1}}变量,然后每次以任何方式修改文件时转回true
(写入或删除文件中的元素)文件)。
我的问题是,是否有更容易的解决方案。在我每次文件更改(同时为我和机器工作)时将变量设置为false
似乎有很多无用的工作,我不希望这样,因为我有一个相当广泛和复杂的应用程序,文件中的更改可能经常发生。
答案后编辑:
谢谢大家,这真的很有帮助。最终我意识到我需要一个在我对文件所做的大部分更改中都需要的功能,所以我不需要那么多工作。其他变化并不多,所以我只是对true
进行了更改
再次感谢
答案 0 :(得分:4)
如果不太可能经常发生变化,那么设置布尔变量的每次更改开销肯定也可以忽略不计。
理想情况下,您的代码中必须指出所有更改都必须经过(例如,您处理撤消/重做的地方),并且您可以将布尔变量更新代码放在那里。
答案 1 :(得分:2)
另一种方法是读取文件并根据程序内容检查其内容,这似乎会产生不必要的开销。或者节省保存某些内容的时间并检查自之后是否进行了更改。
考虑到我认为你的布尔解决方案是最有效的。
答案 2 :(得分:1)
我的建议是使 FileWriter 类记住文件的状态(保存/更改),这样你只需要使用这个编写器,而不是每次都需要处理布尔操作你写信给文件。
答案 3 :(得分:0)
如果文档不是很大,您可以在用户可以编辑的文件后面保留一份副本,然后在应用关闭之前比较两者。
答案 4 :(得分:0)
布尔变量是最好的想法。
boolean isDataChanged
阅读很好,并且不会混淆代码。
答案 5 :(得分:0)
我刚在google上找到了这个有点二进制比较方法,没有承诺,如果它有效;)
/**
* Compare binary files. Both files must be files (not directories) and exist.
*
* @param first - first file
* @param second - second file
* @return boolean - true if files are binery equal
* @throws IOException - error in function
*/
public boolean isFileBinaryEqual(
File first,
File second
) throws IOException
{
// TODO: Test: Missing test
boolean retval = false;
if ((first.exists()) && (second.exists())
&& (first.isFile()) && (second.isFile()))
{
if (first.getCanonicalPath().equals(second.getCanonicalPath()))
{
retval = true;
}
else
{
FileInputStream firstInput = null;
FileInputStream secondInput = null;
BufferedInputStream bufFirstInput = null;
BufferedInputStream bufSecondInput = null;
try
{
firstInput = new FileInputStream(first);
secondInput = new FileInputStream(second);
bufFirstInput = new BufferedInputStream(firstInput, BUFFER_SIZE);
bufSecondInput = new BufferedInputStream(secondInput, BUFFER_SIZE);
int firstByte;
int secondByte;
while (true)
{
firstByte = bufFirstInput.read();
secondByte = bufSecondInput.read();
if (firstByte != secondByte)
{
break;
}
if ((firstByte < 0) && (secondByte < 0))
{
retval = true;
break;
}
}
}
finally
{
try
{
if (bufFirstInput != null)
{
bufFirstInput.close();
}
}
finally
{
if (bufSecondInput != null)
{
bufSecondInput.close();
}
}
}
}
}
return retval;
}
来源:http://www.java2s.com/Code/Java/File-Input-Output/Comparebinaryfiles.htm
如果要保存文件,只需创建currentFile的File对象,并将其与现有文件进行比较;)