如何将字符串www.mywebsite.com/firefox.txt
转换为URL?我想在文件对象中使用它,然后传递给FileReader
构造函数。
如何将字符串www.mywebsite.com/firefox.txt
转换为URL?我想在文件对象中使用它,然后传递给FileReader
构造函数。
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://
开头。
InputStreamReader
时,我总是设置编码,但当我给出示例时,我总是忘记 :) - Bozho如果你的目标是将该字符串(以及类似的字符串)转换为语法上有效的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栏中输入的语法无效的胡言乱语。
String encodedurlStr = URLEncoder.encode(url.toString(),"UTF-8");
使用 new URL("--在此处输入你的URL--") 应该可以将其转换为一个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的对象中;
new InputStreamReader( new URL("--your url here--").openStream() );
我没有尝试过这个,但我认为它应该是可行的 :)
对于那些不太聪明的人来说,可能会感到惊讶,--在此处输入您自己的url-- 意味着你需要填写你自己的网址。
如果您想读取像http://www.mywebsite.com/firefox.txt
这样的URL内容,即使您将URL(或URI)弄成java.io.File
,FileReader
也无法帮助您。
使用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());
file://
开头的URI),而不能读取网页(http://
)。 - Philipp ReichartFileWriter
无法将内容写入远程位置(文件是本地的),我建议您为此提出一个新问题。 - Philipp Reichart