문제

Java 는 여기에 열쇠이다.내가 필요할 수 있지만 사용자는 파일을 삭제할 수 있을 것으로 기대하는"취소"에서는 휴지통이 있습니다.멀리로 말할 수 있는 이것이 가능합니다.누구나 알고 그렇지 않으면?

도움이 되었습니까?

해결책

여러 가지 이유로 Windows 간단히 재활용 빈에 해당하는 폴더 개념이 없습니다..

올바른 방법은 JNI를 사용하여 창을 호출하는 것입니다. SHFileOperation API, 설정 FO_DELETE 깃발 SHFILEOPSTRUCT 구조.

다른 팁

십 년 이후,Java9,마침내 거기에 제공한 방법으로 파일을 이동 휴지통

java.awt.Desktop.moveToTrash(java.io.File):

public boolean moveToTrash​(File file)

지정된 파일을 이동하다.

Parameters:

파일의 파일

을 반환합니다.

는 경우 true 를 반환합 성공적으로 이동 파일을 쓰레기입니다.

가용성의 이 기능에 대한 기본 플랫폼 수 있습 테스트 Desktop.isSupported​(Desktop.Action.MOVE_TO_TRASH).

Suns 사이트 에서이 RFE를 찾았습니다.http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5080625

이것은 이것을 할 수있는 자바 방법이 없다고 말합니다. 그리고 @john topley가 방금 게시 한 것처럼 유일한 해결책은 JNI 호출입니다.

참조 fileutil 인큐베이터 프로젝트 (의 일부 Java 데스크탑 통합 구성 요소 프로젝트):

이 인큐베이터 프로젝트는 해당 파일 유틸리티 기능을 호스팅하기 위해 만들어졌으며, 대부분은 J2SE의 Java.io.File 클래스에 대한 확장입니다. Java 개발자에게 다음과 같은 기능에 대한 자주 요청이 있습니다. 쓰레기통에 파일 보내기, 무료 디스크 공간을 확인하고 파일 속성에 액세스하는 등이 프로젝트는 자주 요청되는 API를 다룹니다.

이것은 Windows뿐만 아니라 다른 플랫폼 (Linux, Mac OS X)에서도 작동해야합니다.

John Topley가 제안한 것처럼, 당신은 기본 작업으로 이것을해야합니다. JNI와 함께 손을 더럽히고 싶지 않은 경우 라이브러리를 사용할 수 있습니다. 자바 기본 액세스 기본 전화를합니다.

Java 9는 새로운 방법이 있지만 제 경우에는 Java 8으로 제한됩니다. Java Native Access 플랫폼 그건 가지고 있습니다 hastrash () 그리고 movetotrash () 방법. 나는 Win 10과 Mac OS (Work)에서 그것을 테스트했습니다.

static boolean moveToTrash(String filePath) {
        File file = new File(filePath);

        FileUtils fileUtils =  FileUtils.getInstance();
        if (fileUtils.hasTrash()) {

            try {
                fileUtils.moveToTrash(new File[] { file });
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        } else {
            System.out.println("No Trash");
            return false;
        }
    }

Maven 저장소https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/5.1.0

혼동하지 마십시오 Java Native Access 플랫폼 Java Native Access가 아닙니다

내 3 센트 - CMD Util을 사용하십시오 재활용 .exe -F를 사용하여 재활용을 강제로 (프롬프트 없음). 완벽하게 작동합니다.

public class Trash {

    public void moveToTrash(File ... file) throws IOException {
        moveToTrash(false, file);
    }

    public void promptMoveToTrash(File ... file) throws IOException {
        moveToTrash(true, file);
    }

    private void moveToTrash(boolean withPrompt, File ... file) throws IOException {
        String fileList = Stream.of(file).map(File::getAbsolutePath).reduce((f1, f2)->f1+" "+f2).orElse("");
        Runtime.getRuntime().exec("Recycle.exe "+(withPrompt ? "" : "-f ")+fileList);
    }

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top