3

我有一个录音应用程序,我正在尝试实现一个功能来检查具有特定名称的录制文件是否已经存在。如果用户键入已经存在的文件名,则应显示警告对话框。

所有文件名都存储在设备上的 .txt 文件中。

我当前的代码:

try {
    BufferedReader br = new BufferedReader(new FileReader(txtFilePath));
    String line = null;

    while ((line = br.readLine()) != null) {
        if (line.equals(input.getText().toString())) {
            nameAlreadyExists();
        }
    }
    br.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}

newFileName = input.getText();

from = new File(appDirectory, beforeRename);
to = new File(appDirectory, newFileName + ".mp3");
from.renameTo(to);
writeToFile(input);
toast.show();

这段代码只能正常工作。它确实成功地检查了文件名是否已经存在。如果文件名尚不存在,它将正常工作。但是如果文件名已经存在,那么用户将看到“nameAlreadyExists()”警告对话框,但该文件仍将被添加和覆盖。如何让我的代码停在“nameAlreadyExists()”?

我用以下代码解决了这个问题:

File newFile = new File(appDirectory, input.getText().toString() + ".mp3");
if (newFile.exists())
            {
                nameAlreadyExists();
            }
            else
            {
                newFileName = input.getText();

                from = new File (appDirectory, beforeRename);
                to = new File (appDirectory, newFileName + ".mp3");
                from.renameTo(to);
                writeToFile(input);
                toast.show();
            }
4

4 回答 4

18

该类File提供了exists()方法,true如果文件存在则返回。

File f = new File(newFileName);
if(f.exists()) { /* show alert */ }
于 2013-08-29T13:08:38.107 回答
0

您可以轻松编写return;以从函数中退出(如果那是函数)。或使用

if(f.exists() /* f is a File object */ ) /* That is a bool, returns true if file exists */

声明,检查文件是否存在,然后做正确的事情。

于 2013-08-29T13:09:18.330 回答
0

下面是我用来完成任务的代码,

File mediaStorageDir = new File(
                    Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                    "My_Folder");

            if (!mediaStorageDir.exists()) {
                if (!mediaStorageDir.mkdirs()) {
                    Log.d("My_Folder", "failed to create directory");
                    return null;
                }
            }
于 2013-08-29T13:09:25.577 回答
0

如果文件确实存在,我认为您缺少一些标志来分叉您的代码:

    boolean  fileExists = false;
    try {

    BufferedReader br = new BufferedReader(new FileReader(txtFilePath));
    String line = null;

    while ((line = br.readLine()) != null) {
        if (line.equals(input.getText().toString())) {
            fileExists = true;
            nameAlreadyExists();
        }
    }
    br.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}
if(!fileExists)
{
 newFileName = input.getText();

 from = new File(appDirectory, beforeRename);
 to = new File(appDirectory, newFileName + ".mp3");
 from.renameTo(to);
 writeToFile(input);
 toast.show();
}

并随意使用上述 File 的 exists() 函数....

于 2013-08-29T13:16:18.323 回答