将字符串转换为URI

时间:2011-10-29 14:17:23

标签: java

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

5 个答案:

答案 0 :(得分:4)

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

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

如果要读取远程文件,则需要以下内容:

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

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

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

开头

答案 1 :(得分:1)

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

具体来说,您需要弄清楚启发式最有可能将用户输入转换为用户意味着的URL。然后编写一些代码来实现它们。我首先要对浏览器进行一些实验,然后尝试弄清楚它在做什么。


您的评论不清楚,但我认为您说该字符串是本地文件名,您想将其转换为“file:”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栏中键入的语法上无效的废话。

答案 2 :(得分:0)

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

例如:

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

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

答案 3 :(得分:0)

新网址(“ - 你的网址在这里 - ”)应该把它变成一个网址,但是文件构造函数需要一个uri而不是一个网址...

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.) { }

但是要获取网址的内容,您可能需要尝试

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

并且可以将它包装在InputStreamReader ala;

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

没有尝试任何此类但看不出它不起作用的原因:)

你们中间的愚昧人可能会感到惊讶 - 你们这里的网址 - 意味着你要填写你自己的网址。

答案 4 :(得分:0)

如果您想阅读http://www.mywebsite.com/firefox.txt之类的网址内容,即使您以某种方式将网址(或更确切地说是URI)修改为FileReaderjava.io.File也无法帮助您。

使用URL.openStream()InputStreamReader会获取网址的字符串内容,但可能会弄乱内容,因为您可能会忽略服务器发送的内容编码。

我建议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%处理)

相关问题