【问题标题】:How to escape problem slashes in new File?如何逃避新文件中的问题斜线?
【发布时间】:2019-12-06 15:17:57
【问题描述】:

我有这个:

fos = new FileOutputStream(new File(cdn.replace('/', File.separatorChar), request.getEntity().getNewfilepath()));

我也试过这个:

fos = new FileOutputStream(new File(cdn, request.getEntity().getNewfilepath()));

但我收到一个错误:

java.io.FileNotFoundException: http:\cdn\test.jpg(文件名、目录名或卷标语法不正确)

有什么建议可以解决这个问题吗??

cdn 是网址:http://cdn

我想要实现的是将文件保存在http://cdn/test.jpg

【问题讨论】:

  • 现在我想起来了,如果它是一个 http url,为什么你要替换斜线呢?或者你为什么使用 http url 进行输出?
  • @FedericoklezCulloca cdn 是 url cdn
  • 我想将此文件保存在具有 url 的文件系统上:http//cdn + filepath
  • 这行不通。 http url 不是可写文件。你不能给它写信。
  • 如果是 URL,则意味着它被视为远程系统(即使它可能是本地系统)。在这种情况下,远程服务器应该提供一些 HTTP API 来与之通信。假设它提供了一个用于写入信息的 API 和一个用于读取信息的 API。然后,您向执行您的请求并以 HTTP 响应响应的服务器发送 HTTP 请求。 FileOutputStream 在本地系统上工作,而不是在远程系统上

标签: java


【解决方案1】:

正斜杠始终有效,在 Windows 上也是如此。 见“forward-slash-or-backslash

而且反斜杠绝对不会在 URL 上起作用。

在您对 Abra 的回复后,我更了解您想要做什么。 您需要将 URL 作为输入流打开并创建一个指向本地文件的新输出流。

文件理解 http 布局,因此您可以使用它来获取包含文件名称的 url 的最后一部分(参见变量 f):

File 也有一个带有 2 个参数的构造函数:路径 + 文件名。如果你使用这个,你就不需要麻烦正斜杠或反斜杠问题了。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class InternetReader {

    private static void copyInputStreamToOutputstream(InputStream in, OutputStream out) throws IOException {
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
    }

    public static void main(String[] args) throws IOException {
        File f = new File("http://google.be/test.jpg");
        System.out.println(f.getName());
        File localPath = new File("/cdn/opt");
        File localDestination = new File(localPath, f.getName());
        URL remoteURL = new URL("http://google.be/test.jpg");
        try (InputStream is = remoteURL.openStream(); OutputStream os = new FileOutputStream(localDestination)) {
            copyInputStreamToOutputstream(is, os);
        }
    }

}

【讨论】:

  • 这对于本地系统上的文件来说很好,但是由于 OP 试图使用 HTTP URL 进行文件输出,问题比应该使用哪种类型的斜线更深。
  • @jsheeran 不深。较浅。事实上不存在。 URL 中没有反斜杠。
猜你喜欢
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2022-11-24
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多