هل من الممكن مع جافا حذف إلى سلة المهملات ؟

StackOverflow https://stackoverflow.com/questions/222463

  •  03-07-2019
  •  | 
  •  

سؤال

جافا هو المفتاح هنا.أنا بحاجة إلى أن تكون قادرة على حذف الملفات ولكن المستخدمين نتوقع أن تكون قادرة على "الحذف" من "سلة المحذوفات".بقدر ما أستطيع أن أقول هذا غير ممكن.أحد يعرف خلاف ذلك ؟

هل كانت مفيدة؟

المحلول

لأسباب مختلفة ويندوز لا يوجد لديه مفهوم مجلد ببساطة يتوافق مع سلة المحذوفات.

الطريقة الصحيحة لاستخدام JNI الاحتجاج ويندوز SHFileOperation API, وضع FO_DELETE العلم في SHFILEOPSTRUCT هيكل.

نصائح أخرى

بعد عشر سنوات ، مع جافا 9, أخيرا هناك مدمج طريقة نقل الملفات إلى سلة المهملات

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

public boolean moveToTrash​(File file)

يتحرك الملف المحدد إلى سلة المهملات.

المعلمات:

الملف - الملف

العوائد:

إرجاع true إذا نجحت في نقل الملف إلى سلة المهملات.

توفر هذه الميزة الأساسية منصة يمكن اختبارها مع Desktop.isSupported​(Desktop.Action.MOVE_TO_TRASH).

لقد وجدت هذا RFE على شموس الموقع:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5080625

هذا يقول لي ليس هناك مواطن جافا طريقة للقيام بذلك.وكما @جون Topley مجرد نشر الحل الوحيد هو JNI الاتصال.

ترى fileutil مشروع حاضنة (جزء من جافا سطح المكتب تكامل مكونات المشروع):

هذا مشروع حاضنة يتم إنشاؤها لاستضافة تلك الأداة المساعدة الملف وظائف معظمها امتداد إلى جاوة.io.ملف فئة في J2SE.هناك كثرة الطلبات المقدمة من مطوري جافا لهذه الميزات مثل: إرسال ملف إلى سلة المهملات, التحقق من مساحة القرص الحرة ، الوصول إلى سمات الملف.... الخهذا المشروع عناوين مثل هذا في كثير من الأحيان طلب واجهات برمجة التطبيقات.

لاحظ أن هذا يجب أن تعمل ليس فقط على ويندوز ، ولكن على منصات أخرى (لينكس, نظام التشغيل Mac OS X) كذلك.

جون Topley يوحي ، يجب أن تفعل هذا مع مواطن العملية.في حال كنت لا ترغب في الحصول على أيديكم القذرة مع بعض JNI ، يمكن استخدام مكتبة تسمى جافا الوصول الأصلية للقيام المكالمات المحلية.

جافا 9 طريقة جديدة ولكن في حالتي أنا يقتصر جافا 8.وجدت جافا الأصلية منصة الوصول وقد hasTrash() و moveToTrash() الأسلوب.لقد اختبرت ذلك على الفوز 10 و Mac OS (عمل) بالنسبة لي.

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;
        }
    }

مستودع مخضرم https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/5.1.0

لا تخلط بين فمن جافا الأصلية منصة الوصول لا جافا الوصول الأصلية

بلدي 3 سنت - استخدام cmd util Recycle.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