【问题标题】:Converting string to URI将字符串转换为 URI
【发布时间】:2011-12-17 20:59:17
【问题描述】:

如何将字符串 www.mywebsite.com/firefox.txt 转换为 URL ?我想在文件对象中使用它,然后在 FileReader 构造函数中使用它。

【问题讨论】:

  • 你的目标是什么?你想要那个 URL 的内容作为一个字符串吗?将 URI(不是 URL)修改为 File 以传递给 FileReader 不会让您到达那里,因为该类只读取 files(URI 以 file:// 开头),而不是 网页 (http://).
  • @Philipp Reichart 我想使用 FileWriter 在我的服务器上更改文件的内容(使用小程序时)。
  • 您的问题的大多数答案都假设您只想阅读内容 - 编写远程位置不适用于FileWriter(文件是本地文件),我建议您打开一个新问题那个。
  • Convert String to Uri的可能重复

标签: java


【解决方案1】:

您可以使用new URI(string) 构造函数(用于URI)和new URL(string) 构造函数用于URL

但这不适用于 FileReader - 它要求 URI 方案为 file:

如果你想读取一个远程文件,你需要这样的东西:

Reader reader = new InputStreamReader(new URL(urlString).openStream(), encoding);

编码可以取自url.openConnection()获得的HttpURLConnection,但如果你事先知道,也可以将其设置为特定的东西。 (顺便说一句,在上面的示例中,我省略了所有 I/O 资源管理)

注意(感谢@StephenC):url 字符串必须是有效的 URL,这意味着它必须以 http:// 开头

【讨论】:

  • +1 用于猜测 OP 真正想要什么,但这仍然会忽略服务器发送的任何内容编码。
  • 是的,在使用InputStreamReader时我总是设置编码,当我用它举例时我总是忘记:)
  • java在一边,服务器在另一边,http是协议。您需要不同的协议。以 FTP 为例
  • @ Bozho 如果我使用 FTP,我是否可以使用 FileReader 和 FileWriter 写入远程服务器上托管的文件?
  • 没有。您将不得不使用完全不同的库。
【解决方案2】:

如果您的意思是需要将该字符串转换为 URL 字符串,则可以使用 URLEncoder 类对 Url 格式的字符串进行解码/编码。

例如:

String encodedurlStr = URLEncoder.encode(url.toString(),"UTF-8"); 

如果需要获取一个URL Type,下面的答案是正确的(使用URL类构造函数)

【讨论】:

    【解决方案3】:

    new URL("--your url here--") 应该把它变成一个 URL,但是 File 构造函数接受一个 uri 而不是一个 url 所以......

    try {
        URL url = new URL("--your url here--");
        File f = new File( url.toURI() );
        FileReader reader = new FileReader(f);
    } catch (MalformedURL...IOException e.t.c.) { }
    

    但是要获取您可能想要尝试的 url 的内容

    new URL("--your url here--").openStream();
    

    并且可能将其包装在 InputStreamReader ala 中;

    new InputStreamReader( new URL("--your url here--").openStream() );
    

    没有尝试过这些,但看不出有什么原因它不起作用:)

    可能会让你们中间不聪明的人感到惊讶——你的网址在这里——意味着你填写自己的网址。

    【讨论】:

    • 我认为这行不通。 URL 构造函数需要一个语法上有效的 URL 字符串……而该字符串在语法上是不正确的。
    • 来吧,现在你已经足够大了,肯定能解决这些问题 :)
    • 哇,你真是个小子,以后不会去帮助别人了。我没有提出协议,因为提出问题的人没有添加协议,我认为他们会知道它是什么。别担心,我不会再尝试帮助任何人了。
    • 哇,我不是故意要冒犯你的,我希望最后的笑脸能把它泄露出去。对不起。我们都在这里提供帮助和学习。
    • @RichardJohnson - 实际上,我认为 OP 想要的是将这样的(非 url)字符串转换为有效 url 的东西。
    【解决方案4】:

    如果您想读取像 http://www.mywebsite.com/firefox.txt 这样的 URL 的内容,即使您以某种方式将 URL(或者更确切地说是 URI)更改为 java.io.FileFileReader 也无济于事。

    使用URL.openStream()InputStreamReader 可以获得URL 的字符串内容,但可能会混淆内容,因为您可能会忽略服务器发送的内容编码。

    我建议Apache HttpClient 和类似的东西:

    String url = "http://www.mywebsite.com/firefox.txt";
    
    HttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(new HttpGet(url));
    String contents = EntityUtils.toString(response.getEntity());
    

    对于纯文本文件,这应该为您提供没有任何编码问题的内容。 (HTML 文件可以使用元标记指定其编码,使用 HTTP 客户端无法 100% 处理)

    【讨论】:

      【解决方案5】:

      如果您的目标是将字符串(和类似字符串)转换为语法上有效的 URL……就像典型浏览器的 URL 栏一样……那么答案就是“使用启发式”。

      具体来说,您需要找出最有可能将用户输入转化为用户所指的 URL 的启发式方法。然后编写一些代码来实现它们。我会先用你喜欢的浏览器做一些实验,然后试着弄清楚它在做什么。


      您的评论不清楚,但我认为您是在说该字符串是本地文件名,并且您想将其转换为“文件:” URL。

      File file = new File("www.mywebsite.com/firefox.txt");
      URL url = file.toURI().toURL();
      

      如果你想写入一个远程文件,你不能简单地使用 URL 对象和openStream()。写入由 URL 标识的远程资源通常需要一个 http 或 ftp URL,并使用实现相应协议栈的库。

      同样,您不能使用 FileWriter API 来执行此操作……除非文件位于已挂载的文件系统中;例如作为 Windows 网络共享。 FileWriter API 仅适用于本地操作系统为您的应用程序提供的统一“文件系统”中的文件。

      最后,我们回到您需要使用有效 URL 的事实……而不仅仅是大多数用户在浏览器的 URL 栏中键入的语法无效的废话。

      【讨论】:

      • 我想使用 FileWriter 在我的服务器上更改文件的内容(使用小程序时)。并且托管文件的地址是一个字符串,所以我想将其更改为 url/uri
      猜你喜欢
      • 2013-06-25
      • 2011-03-30
      • 2014-03-06
      • 2011-02-12
      • 2015-07-23
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多