警告:File.mkdir() 被忽略

WARNING: File.mkdir() is ignored

我使用 Media Recorder API 创建了一个基本的音频录制应用程序。我正在尝试在 SD 卡中创建一个文件夹并将我录制的文件保存到该文件夹​​中。我收到以下代码的警告。

File.mkdir() 被忽略

    // Assign random number to avoid audio file from overwriting
    Long tsLong = System.currentTimeMillis()/1000;

    // Specify a Location for the recorded file to be stored in the SD card
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordTest/";
    File path = new File(mFileName);
    if(!path.exists()) {
        path.mkdir();
    }
    mFileName += "/AudioRecordTest_" + tsLong.toString() + ".mp3";

如何解决此警告消息。如有其他错误欢迎随时修改代码

如果我错了请纠正我,但我希望(编译)警告消息确实是这样说的:

Result of File.mkdir() is ignored

...或类似的东西。它告诉您您忽略了 mkdir() 调用的结果,该调用告诉您目录是否已创建。

避免警告的一种方法是测试结果并采取适当的措施。另一种方法是简单地将结果分配给一个临时变量,忽略它,然后(可能)崩溃,因为目录没有在应该创建的时候创建。

(猜猜哪个方案更好...)


Feel free to modify the code if there is any other mistake.

既然你问了......对 Java 变量名使用匈牙利符号是错误的风格。 Java 是一种强类型语言,其中所有变量都有明确的声明类型。你不应该需要一些可怕的标识符约定的精神拐杖来告诉你一个变量的类型是什么。

正如@Stephen C建议的那样,我以这些方式处理

1)

boolean isDirectoryCreated= path.mkdir();

并忽略 'isDirectoryCreated'

2)(推荐)

 boolean isDirectoryCreated=path.exists();
 if (!isDirectoryCreated) {
     isDirectoryCreated= path.mkdir();
 }
 if(isDirectoryCreated) {
    // do something
 }

3)

if (!path.exists()) {
   if(path.mkdir()){
     // do something
   }
}

如果您想忽略此警告,请在方法中添加: @SuppressWarnings("all")

我创建了一个效用函数:

@SuppressWarnings("unused")
private static void IGNORE_RESULT(boolean b) {}

然后使用:

IGNORE_RESULT(path.mkdir());

我喜欢这个解决方案,因为它是自我记录的。您明确表示您知道有一个结果,但您故意忽略它。它还应该在编译期间优化为 NOP,因此在运行时没有不必要的测试只是为了抑制无用的警告。