هر 6: كيفية حذف الملفات المؤقتة بعد استدعاء أسلوب على شبكة الإنترنت قد انتهت؟

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

سؤال

ولدي ملف مؤقت مع البيانات التي عادت كجزء من استجابة SOAP عبر MTOM مرفق ثنائي. أود أن القمامة في أقرب وقت استدعاء الأسلوب "الغايات" (أي انتهاء نقل). ما هي أفضل طريقة بالنسبة لي للقيام بذلك؟ وأفضل وسيلة يمكنني معرفة كيفية القيام بذلك هو حذفها عندما يتم تدمير الدورة، ولكن لست متأكدا إذا كان هناك أكثر من طريقة "فورية" للقيام بذلك.

ولمعلوماتك، أنا لا تستخدم محور، وأنا أستخدم-WS جاكس، إذا ما يهم.

وUPDATE: لست متأكدا من answerers وفي فهم حقا هذه القضية. أنا أعرف كيفية حذف ملف في جافا. مشكلتي هي هذه:

@javax.jws.WebService 
public class MyWebService {
...

 @javax.jws.WebMethod 
 public MyFileResult getSomeObject() {
   File mytempfile = new File("tempfile.txt");
   MyFileResult result = new MyFileResult();
   result.setFile(mytempfile);  // sets mytempfile as MTOM attachment

   // mytempfile.delete() iS WRONG
   // can't delete mytempfile because it hasn't been returned to the web service  client
   // yet.  So how do I remove it?

   return result;
 }
}
هل كانت مفيدة؟

المحلول

وأنا واجهت نفس المشكلة. القضية هي أن كومة JAX-WS يدير الملف. وليس من الممكن لتحديد في التعليمات البرمجية عندما يتم JAX-WS مع الملف بحيث كنت لا تعرف متى حذفه.

في حالتي، أنا باستخدام DataHandler على طراز كائن بلدي بدلا من ملف. MyFileResult سيكون لها الحقل التالي بدلا من حقل الملف:

private DataHandler handler;

وكان لي حل لإنشاء نسخة مخصصة من FileDataSource. بدلا من إرجاع فيلينبوتستريام لقراءة محتويات الملف، أعود تمديد التالي من فيلينبوتستريام:

private class TemporaryFileInputStream extends FileInputStream {
    public TemporaryFileInputStream(File file) throws FileNotFoundException {
        super(file);
    }

    @Override
    public void close() throws IOException {
        super.close();
        file.delete();
    }
}

وأساسا مصدر البيانات يسمح قراءة مرة واحدة فقط. بعد إغلاق تيار، يتم حذف الملف. منذ كومة JAX-WS فقط يقرأ الملف مرة واحدة، وأنها تعمل.

والحل هو قليلا من الإختراق ولكن يبدو أن الخيار الأفضل في هذه الحالة.

نصائح أخرى

هل تستخدم ملفات جافا درجة الحرارة القياسية؟ إذا كان الأمر كذلك، يمكنك القيام بذلك:

File script = File.createTempFile("temp", ".tmp", new File("./"));
... use the file ...
script.delete(); // delete when done.

والمجلد العمل الذي تقوم بإعداد في سياق هذا تطبيق الويب الذي كنت تتحدث عنه. يمكنك تعيين هذا الدليل عمل في دليل معروفة؟ إذا كانت الإجابة بنعم، ثم يمكنك العثور على ملف مؤقت داخل دليل عمل مؤقت (أي تعلمون). عندما تجد، يمكنك حذفها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top