无法使用文件连接删除SD卡中的文件--Blackberry
我已经开发了一个黑莓应用程序,其中我有视频控制来捕获图像,然后我将图像保存在根目录中,以我想要的名称显示屏幕。。。在“重新捕获”按钮中,单击“我再次捕获图像”,然后删除以前的图像,并使用文件连接将新图像以相同的名称保存在相同的路径中。我的问题是它在emulator中工作得很好。但当我在设备中测试时,当我试图删除以前的图像以保存新图像时,它会抛出错误。。它抛出“net.rim.device.api.io.file.fileioexception:该文件当前正在使用”。。请帮帮我无法使用文件连接删除SD卡中的文件--Blackberry,blackberry,Blackberry,我已经开发了一个黑莓应用程序,其中我有视频控制来捕获图像,然后我将图像保存在根目录中,以我想要的名称显示屏幕。。。在“重新捕获”按钮中,单击“我再次捕获图像”,然后删除以前的图像,并使用文件连接将新图像以相同的名称保存在相同的路径中。我的问题是它在emulator中工作得很好。但当我在设备中测试时,当我试图删除以前的图像以保存新图像时,它会抛出错误。。它抛出“net.rim.device.api.io.file.fileioexception:该文件当前正在使用”。。请帮帮我 @阿希米德,@j
@阿希米德,@juanmabaiu 这是在设备中测试时,它用来捕获并抛出异常的函数
public void fieldChanged( final byte[] _raw )
{
try
{
flag ++;
// Create the connection to a file that may or
// may not exist.
FileConnection file = (FileConnection)Connector.open(FILE_NAME + "_front" + EXTENSION);
// If the file exists, increment the counter until we find
// one that hasn't been created yet.
while( file.exists() )
{
file.delete();
file = (FileConnection)Connector.open( FILE_NAME + "_front" + EXTENSION );
}
//FileConnection file_temp = (FileConnection)Connector.open(FILE_NAME + "tempimg" + EXTENSION);
//file_temp.delete();
// We know the file doesn't exist yet, so create it
file.create();
// Write the image to the file
OutputStream out = file.openOutputStream();
out.write(_raw);
// Close the connections
out.close();
file.close();
//Dialog.inform( "Saved to " + FILE_NAME + "_front" + EXTENSION );
}
catch(Exception e)
{
home.errorDialog("ERROR " + e.getClass() + ": " + e.getMessage());
Dialog.inform( "File not saved this time");
}
}
这段代码很臭:
while( file.exists() )
{
file.delete();
file = (FileConnection)Connector.open( FILE_NAME + "_front" + EXTENSION );
}
事实上,如果文件存在,则删除它,但忘记了刚刚删除的文件的FileConnection
实例。我想这可能就是原因。您需要立即关闭文件连接
实例。下面是关于这一点的说明:
类似地,可以使用FileConnection.delete()方法删除文件或目录,开发人员应在删除后立即关闭连接,以防止异常访问到不存在的文件或目录的连接
因此,请尝试使用以下方法:
if (file.exists()) {
file.delete();
file.close();
file = (FileConnection) Connector.open(FILE_NAME + "_front" + EXTENSION);
}
需要强调的另一点是,代码非常自信/乐观,它不能正确处理极端情况。例如,如果
out.write(_raw)怎么办代码>失败的原因是什么(例如,没有可用空间)?FileConnection和OutputStream是否将关闭?不需要。因此,您需要添加一个最后
块,确保您实际上没有留下任何打开的内容。我也面临这个问题,但当我尝试将图像保存在设备内存而不是SD卡上时。以下代码可以删除图像:
if (file.exists()) {
file.delete();
file.close();
}
确保在保存或删除文件后关闭了所有流。试试Arhimed在上述评论中所说的。如果无法修复,请添加一些代码。嗨,arhimed和juanmabaiu。。代码方面一切都很好。。它在模拟器中工作得很好。仅在设备中测试时显示错误..感谢您的回复。我已经试过你说的了。但我仍然面临着同样的问题。某些东西确实包含了该文件的系统资源。试着弄清楚到底是什么做的。上面的if循环在模拟器中也能很好地工作,并在设备中抛出异常。。如果你愿意,我可以把我的全部代码寄给你。你能帮我解决这个问题吗?对不起,伙计,不幸的是我无法处理你的电子邮件请求。