리팩토링(스프링기반)

java.nio.Files을 이용한 파일 삭제

까오기 2019. 1. 8. 18:09

Use "java.nio.Files#delete" here for better messages on error conditions.

SonarQube를 이용하니 새로운 기술도 알려 주네요. ^^

수정 전

public static boolean deleteFile(String path, String name){

     File file = new File(path + name);

if(file.exists()){

return file.delete();

}

return false;

}

수정 후 

    public static boolean deleteFile(String path, String name) {

        Path filePath = FileSystems.getDefault().getPath(path, name);

        try {

            Files.delete(filePath);

        } catch (IOException | SecurityException e) {

            return false;

        }

        return true;

    }


"java.nio.Files#delete" should be preferred (squid:S4042)

CODE_SMELL Code smell MAJOR Major

When java.io.File#delete fails, this boolean method simply returns false with no indication of the cause. On the other hand, when java.nio.Files#delete fails, this void method returns one of a series of exception types to better indicate the cause of the failure. And since more information is generally better in a debugging situation, java.nio.Files#delete is the preferred option.

Noncompliant Code Example

public void cleanUp(Path path) {
  File file = new File(path);
  if (!file.delete()) {  // Noncompliant
    //...
  }
}

Compliant Solution

public void cleanUp(Path path) throws NoSuchFileException, DirectoryNotEmptyException, IOException{
  Files.delete(path);
}