我的目录映射在我的机器上,以便我可以通过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数据库正在创建的虚拟目录。
答案 0 :(得分:4)
我的理解是你正试图写信给Oracle XML DB Repository。 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客户端。这个article显示了如何做到这一点,看起来很简单。但是,由于Slide项目现已退役,我不推荐它。
幸运(或不),Apache Jackrabbit项目是Slide的替代项目......但是AFAIK在Jackrabbit中的WebDAV支持更侧重于服务器端实现而不是客户端。无论如何,你会在jackrabbit-users邮件列表的this thread中找到一些代码示例。
我想我会选择HttpClient并使用Tutorial或Sample Code作为起点。
答案 1 :(得分:3)
我不太确定我在这里谈论的是什么(不是Java人)但是你可能“已经映射”了,你传递的是URL而不是预期的文件系统路径。如果(例如)您在Windows下有映射驱动器,请使用分配的驱动器号。
答案 2 :(得分:3)
您尝试使用协议传递位置URI。您需要传递位置无协议:
\\ DEV1 \数据\ XML \ myTestFile123.xml
答案 3 :(得分:3)
不要尝试使用映射的驱动器号(看起来非常弱),而是查看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主题。
答案 4 :(得分:1)
您是如何在Windows中映射文件的?我怀疑它没有使用HTTP协议,因为没有这样的机制来创建文件。所以你不会使用“http”作为你的协议。
找到映射的驱动器号,您可能需要更多类似的内容:
File f = new File("F:\\dir\\file.ext");
如果您使用Samba,可能需要查看JCIFS,然后您可以使用:
smb://server/share/
答案 5 :(得分:0)
如果您在Windows资源管理器中看到myTestFile123.xml
,请右键单击它并复制Location:
属性值。然后使用这个作为新的File()参数,但要么将反斜杠加倍,要么将它们更改为正斜杠。