我的目录映射在我的机器上,以便我可以通过Windows资源管理器浏览和写入它。我想通过java编写文件。

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://的映射目录?因为这就是我提供目录的方式。它是oracle数据库正在创建的虚拟目录。

有帮助吗?

解决方案

我的理解是您正在尝试写信给 Oracle XML DB存储库。 Oracle XML DB Repository是Oracle9i Database Release 2为XML存储引入的一项功能,可以通过FTP或HTTP / WebDAV访问。在您的情况下,看起来您正在尝试使用HTTP / WebDAV。

如维基百科上的 WedDAV 页面所述:

  

WedDAV是一组扩展   允许用户编辑的HTTP顶部   协作管理文件   远程万维网服务器。

换句话说,在WebDAV存储库中添加文件,删除文件,重命名等等都是使用HTTP词语:PUT,DELETE,MOVE等完成的(参见 RFC 4918 了解更多详情。)

因此,可以使用 java.net 中的类来完成与WebDAV服务器的交互。

或者您可以使用更高级别的API,例如 Jakarta Commons HttpClient

或者您可以使用像 Slide 项目提供的Java WebDAV客户端。这个文章展示了如何做到它看起来简单。但是,由于Slide项目现已退役,我不推荐它。

幸运(或不), Apache Jackrabbit 项目是幻灯片的替代品......但是AFAIK Jackrabbit中的WebDAV支持更侧重于服务器端实现而不是客户端。无论如何,您可以在此主题中找到一些代码示例。 jackrabbit-users邮件列表。

我想我会选择HttpClient并使用教程示例代码作为起点。

其他提示

我不太确定我在这里谈论的是什么(不是Java人),但是你可能会“将它映射”。您传入的是URL而不是预期的文件系统路径。如果(例如)您在Windows下有映射驱动器,请使用分配的驱动器号。

您尝试使用协议传递位置URI。您需要传递位置无协议:

  

\\ DEV1 \数据\ XML \ myTestFile123.xml

不要尝试使用映射的驱动器号(看起来非常弱),而是查看 JCIFS

  

JCIFS是一个开源客户端库,它以100%Java实现CIFS / SMB网络协议。 CIFS是Microsoft Windows平台上的标准文件共享协议(例如Map Network Drive ...)。该客户广泛用于大型内联网的生产。

这段代码展示了如何使用jCifs登录到远程计算机和写入文件(Muneeb Ahmad学分):

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主题。

您是如何在Windows中映射文件的?我怀疑它没有使用HTTP协议,因为没有这样的机制来创建文件。因此,您无法使用“http”进行任何操作。作为你的协议。

找到映射的驱动器号,您可能需要更多类似的内容:

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

如果您使用的是Samba,可能需要查看 JCIFS ,然后您可以使用:

smb://server/share/

使用本地路径

如果您在Windows资源管理器中可以看到 myTestFile123.xml ,请右键单击它并复制 Location:属性值。然后使用这个作为新的File()参数,但要么将反斜杠加倍,要么将它们更改为正斜杠。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top