我们可以将Url路径和文件名传递给java中的FileOutputStream

时间:2014-04-16 06:55:24

标签: java

Sir我是java的新手我想在URL路径上写一个文件是否有任何可能的方法在URL路径上写一个文件给我一些提示

3 个答案:

答案 0 :(得分:1)

否则您无法将URL路径和FileName作为参数传递给FileOutputStream。

但是,您可以使用以下代码从指定的URL读取文件:

 try{    
            URL url = new URL("http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html");
            String path = "D://StackOverflow/";
            InputStream ins = url.openStream();
            OutputStream ous = new FileOutputStream(path);
            final byte[] b = new byte[2048];
            int length;

                while ((length = ins.read(b)) != -1) {
                       ous.write(b, 0, length);
                 }

                   ins.close();
                   ous.close();
        } catch(Exception e){
            e.printStackTrace();
        }

您能否通过将URL和fileName传递给FileOutPutStream来解释您实际想要实现的目标?

答案 1 :(得分:0)

File file = new File(url.getPath());
FileOutputStream fileOutputStream = new FileOutputStream(file);

这实际上适用于简单的情况,例如file:/path/to/abc(实际上是错误的文件URL,因为它缺少//)或file:///path/to/abc(正确的文件URL语法)。但是,这不能当路径包含不安全的URL字符时工作,例如file:///c:/Documents%20and%20Settings/...,因为"%20"以文件名结尾,这是错误的。

我们被告知在JDK1.5中添加了java.net.URI来替换损坏的URL类,那么我们为什么不尝试呢?

File file = new File(url.toURI());
FileOutputStream fileOutputStream = new FileOutputStream(file);

这很好地将%20转换为空格(以及所有其他转义字符。)问题解决了吗?不。 URI非常严苛,无法处理file:///c:/Documents and Settings/之类的网址。就RFC而言,这个URL被破坏了,但实际情况是java.net.URL很乐意接受它,所以你经常会看到这个。我相信很多人已经完成new URL("file://"+fileName); - 这些是创建此网址的代码。

所以我目前的版本是两者结合:

    File file;
    try {
      file = new File(url.toURI());
    } catch(URISyntaxException e) {
      file = new File(url.getPath());
    }
   FileOutputStream fileOutputStream = new FileOutputStream(file);

答案 2 :(得分:0)

是的,应该可以 - 你可以使用构造函数new FileOutputStream(new File(new URI()))。阅读有关java.net.URI类的更多信息。