هل من الممكن كتابة الملفات إلى دليل بعيد باستخدام جافا؟

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

سؤال

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

File f = new File("http://dev1:8080/data/xml/myTestFile123.xml");

f.createNewFile();

وأنا على الحصول على الخطأ التالي:

Exception in thread "main" java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(Unknown Source)
    at MainTest.createTestFile(MainTest.java:156)
    at MainTest.main(MainTest.java:72)

هل هناك أي طريقة لإرسال الملفات إلى دليل معين يحتوي على HTTP: // في الجبهة؟ لأن أن يكون الطريق وتقدم الدليل بالنسبة لي. وهو دليل ظاهري قاعدة بيانات أوراكل هو خلق.

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

المحلول

وما أفهمه هو أن تحاول الكتابة إلى أوراكل XML DB مستودع . أوراكل XML DB مستودع هي الميزة التي تم إدخالها من قبل Oracle9i الإصدار قاعدة البيانات 2 لتخزين XML والتي يمكن الوصول إليها من خلال FTP أو HTTP / WEBDAV. في حالتك، يبدو أنك تحاول استخدام HTTP / WEBDAV.

وكما هو موضح في WedDAV الصفحة على ويكيبيديا:

<اقتباس فقرة>   

وWedDAV عبارة عن مجموعة من الملحقات على   رأس HTTP الذي يتيح للمستخدمين تحرير   وإدارة الملفات بشكل تعاوني على   العالم بعيد خوادم الشبكة.

وبعبارة أخرى، إضافة الملفات، حذفها، وإعادة تسمية لهم، وما إلى ذلك في مستودع WEBDAV يتم استخدام الكلمات HTTP: PUT، حذف، نقل، الخ (انظر <لأ href = "http://www.webdav.org /specs/rfc4918.html "يختلط =" نوفولو noreferrer "> RFC 4918 للحصول على مزيد من التفاصيل).

وبناء على ذلك، والتفاعل مع خادم WebDAV يمكن أن يتم ذلك باستخدام طبقات من java.net.

وأو هل يمكن استخدام API مستوى أعلى مثل جاكرتا العموم HttpClient وإصلاحه .

وأو هل يمكن استخدام عميل جافا WEBDAV مثل تلك التي يقدمها rel="nofollow الشرائح المشروع. هذا المقالة يوضح كيفية القيام بذلك، ويبدو بسيط. ومع ذلك، كما هو متقاعد المشروع الشريحة الآن، وأنا لن أوصي به.

ولحسن الحظ (أو لا)، و اباتشي Jackrabbit المشروع هو بديل لشريحة ... ولكن AFAIK دعم WebDAV في Jackrabbit هو أكثر تركيزا على التنفيذ من جانب الخادم من العملاء. على أي حال، ستجد بعض نماذج التعليمات البرمجية في هذا الموضوع على قائمة jackrabbit المستخدمين البريدية.

وأنا أعتقد أن اختيار HttpClient وإصلاحه واستخدام دروس أو rel="nofollow رمز نموذج نقاط كبداية.

نصائح أخرى

ولست متأكدا حقا ما أتحدث عنه هنا (وليس الرجل جافا)، ولكن على الرغم من أنك قد "يكون ذلك تعيين" كنت تمر في URL بدلا من مسار نظام الملفات المتوقع. إذا (على سبيل المثال) لديك محرك أقراص معين تحت Windows، استخدم حرف محرك الأقراص المعين.

لديك في محاولة لتمرير موقع URI مع البروتوكول. تحتاج إلى تمرير بروتوكول بلا الموقع:

<اقتباس فقرة>   

و\\ dev1 \ البيانات \ XML \ myTestFile123.xml

وبدلا من محاولة استخدام حرف محرك أقراص معين (يبدو ضعيفا جدا)، إلقاء نظرة على JCIFS :

<اقتباس فقرة>   

وJCIFS هو مكتبة العميل المفتوحة المصدر التي تطبق بروتوكول الشبكات / SMB CIFS في 100٪ جافا. CIFS هو بروتوكول تبادل الملفات القياسية على منصة مايكروسوفت ويندوز (مثل تعيين محرك أقراص الشبكة ...). ويستخدم هذا العميل على نطاق واسع في الإنتاج على الشبكات الداخلية الكبيرة.

وهذه قطعة من رمز يوضح كيفية <م> تسجيل الدخول إلى الجهاز عن بعد وكتابة الملفات باستخدام jCifs (ائتمانات لمنيب أحمد):

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;

public class Logon {
    public static void main( String argv[] ) throws Exception {
        String user = "user:password";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
        String path = "smb://my_machine_name/D/MyDev/test.txt";
        SmbFile sFile = new SmbFile(path, auth);
        SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
        sfos.write("Muneeb Ahmad".getBytes());
        System.out.println("Done");
    }
}

تعديل : في كما ذكر في تعليق تضاف إلى السؤال الأصلي، ما أفهمه هو الآن الذي تحاول الكتابة إلى دليل WEBDAV. سوف تغطي الموضوع WebDAV في إجابة أخرى لمزيد من الوضوح.

وكيف قمت تعيين ملف في ويندوز؟ وأظن أنه لا يستخدم بروتوكول HTTP، لأنه لا يوجد مثل هذه الآلية موجودة لإنشاء ملفات. حتى أنك لن تحصل على أي مكان باستخدام "HTTP"، كما البروتوكول الخاص بك.

والعثور على حرف محرك أقراص معين، وربما كنت تريد شيئا أكثر مثل:

File f = new File("F:\\dir\\file.ext");

إذا كنت تستخدم سامبا قد ترغب في إلقاء نظرة على JCIFS ثم يمكنك استخدام:

smb://server/share/

استخدام المسار المحلي

إذا ترون myTestFile123.xml في مستكشف النوافذ، ثم بزر الماوس الأيمن فوقه ونسخ قيمة العقار Location:. ثم استخدم هذا بالضبط كوسيطة ملف جديد ()، ولكن إما مضاعفة الخطوط المائلة العكسية أو تغييرها إلى الأمام مائلة.

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