it-swarm.dev

كيفية إنشاء ملف Java.io.File جديد في الذاكرة؟

كيف يمكنني إنشاء File (من Java.io) في الذاكرة - وليس على القرص الثابت؟

أنا أستخدم لغة جافا. لا أريد حفظ الملف على القرص الصلب.

أواجه واجهة برمجة تطبيقات غير صالحة (Java.util.jar.JarFile). انها تتوقع ملف ملف سلسلة اسم الملف. ليس لدي أي ملف (فقط بايت [] محتوى) ويمكنني إنشاء ملف مؤقت ، لكنه ليس حلًا جميلًا. أحتاج إلى التحقق من صحة جرة موقعة.

byte[] content = getContent();
File tempFile = File.createTempFile("tmp", ".tmp");
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(archiveContent);
JarFile jarFile = new JarFile(tempFile);
Manifest manifest = jarFile.getManifest();

سيكون موضع تقدير أي أمثلة على كيفية تحقيق الحصول على البيان دون ملف مؤقت.

أعتقد الآن هذا السؤال ليس الحمل والولادة

73
user1454686

للكتابة على دفق ، في الذاكرة ، استخدم:

new ByteArrayOutputStream();
26
haraldK

كيف يمكنني إنشاء ملف جديد (من Java.io) في الذاكرة ، وليس في القرص الثابت؟

ربما كنت مربكة File و Stream:

  • A File هو تمثيل مجرد للملف والدليل أسماء المسارات . باستخدام كائن File ، يمكنك الوصول إلى بيانات تعريف الملف في نظام الملفات ، وتنفيذ بعض العمليات على الملفات على نظام الملفات هذا ، مثل حذف الملف أو إنشائه. لكن فئة File لا توفر طرقًا لقراءة وكتابة محتويات الملف.
  • للقراءة والكتابة من ملف ما ، فأنت تستخدم كائن Stream ، مثل FileInputStream أو FileOutputStream . يمكن إنشاء هذه التدفقات من كائن File ثم استخدامها للقراءة من الملف والكتابة إليه.

يمكنك إنشاء دفق يستند إلى مخزن مؤقت للبايت موجود في الذاكرة ، باستخدام ByteArrayInputStream و ByteArrayOutputStream للقراءة من والكتابة إلى مخزن مؤقت للبايت بطريقة مماثلة تقرأ وتكتب من ملف. يحتوي الصفيف byte على محتوى "الملف". لا تحتاج إلى كائن File بعد ذلك.

يرث كل من File... و ByteArray... تدفقات من Java.io.OutputStream و Java.io.InputStream ، على التوالي ، بحيث يمكنك استخدام الطبقة العليا الشائعة لإخفاء ما إذا كنت تقرأ من ملف أو من صفيف بايت.

64
Andreas Fester

يمكنك استخدام Java.io.StringWriter.

0
Ingo