هل من الممكن مع جافا حذف إلى سلة المهملات ؟
-
03-07-2019 - |
سؤال
جافا هو المفتاح هنا.أنا بحاجة إلى أن تكون قادرة على حذف الملفات ولكن المستخدمين نتوقع أن تكون قادرة على "الحذف" من "سلة المحذوفات".بقدر ما أستطيع أن أقول هذا غير ممكن.أحد يعرف خلاف ذلك ؟
المحلول
لأسباب مختلفة ويندوز لا يوجد لديه مفهوم مجلد ببساطة يتوافق مع سلة المحذوفات.
الطريقة الصحيحة لاستخدام JNI الاحتجاج ويندوز SHFileOperation
API, وضع FO_DELETE
العلم في SHFILEOPSTRUCT
هيكل.
- SHFileOperation documention
- جافا مثلا نسخ ملف باستخدام SHFileOperation (سلة المحذوفات الرابط في نفس المادة لا يعمل)
نصائح أخرى
بعد عشر سنوات ، مع جافا 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) كذلك.
هنا هو الرابط الصحيح على سبيل المثال باستخدام SHFileOperation إرسال الملف إلى "سلة المحذوفات".
جون 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);
}
}