Java 将字符串转换为URI

Java 将字符串转换为URI,java,Java,如何将字符串www.mywebsite.com/firefox.txt转换为URL?我想在file对象中使用它,然后进入FileReader构造函数。您可以使用newuri(string)构造函数(对于URI)和newurl(string)构造函数(对于URL) 但是对于文件读取器,这不起作用-它要求URI方案是文件: 如果要读取远程文件,需要以下内容: Reader reader = new InputStreamReader(new URL(urlString).openStream(),

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

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

但是对于
文件读取器
,这不起作用-它要求URI方案是
文件:

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

Reader reader = new InputStreamReader(new URL(urlString).openStream(), encoding);
编码可以从
url.openConnection()
获得的
HttpURLConnection
中获取,但如果事先知道,也可以将其设置为特定的内容。(顺便说一句,在上面的示例中,我省略了所有I/O资源管理)


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

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

例如:

String encodedurlStr = URLEncoder.encode(url.toString(),"UTF-8"); 
如果需要获取URL类型,下面的答案是正确的(使用URL类构造函数)

新URL(“--此处的URL-->”)应将其转换为URL,但是文件构造函数采用的是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的内容,那么你的url意味着你要填写你自己的url,这可能会让你中不聪明的人感到惊讶http://www.mywebsite.com/firefox.txt
FileReader
不会帮助您,即使您以某种方式将URL(或者更确切地说是URI)损坏为
java.io.File

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

我建议这样做:

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%处理这些元标记)

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

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


您的评论不清楚,但我认为您是说字符串是本地文件名,您希望将其转换为“file:”URL


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

同样,您也不能使用FileWriter API来完成此操作。。。除非文件位于已装入的文件系统中;e、 g.作为Windows网络共享。FileWriter API仅适用于本地操作系统为应用程序提供的统一“文件系统”中的文件


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

你的目标是什么?是否希望该URL的内容作为字符串?将URI(而不是URL)压缩到文件中以传递给FileReader不会让您达到目的,因为该类只读取文件(URI以
File://
开头),而不读取网页(
http://
)。@Philipp-Reichart我想更改文件的内容(使用小程序时)在我的服务器上使用FileWriter。对您的问题的大多数回答都假设您只想阅读内容——编写远程位置无法使用
FileWriter
(文件是本地的),我建议您为此打开一个新问题。我想可能重复的问题不会起作用。URL构造函数需要语法有效的URL字符串。。。这个字符串在语法上是不正确的。来吧,现在你的尺寸足够大,可以解决这些问题了:)哇,你真的很小,以后不要试图帮助任何人。我没有提出协议,因为提问的人没有添加协议,我想他们会知道协议是什么。别担心,我再也不会试图帮助任何人了。哇,我不是有意冒犯你,我希望最后的微笑能让你明白这一点。我很抱歉。我们都是来帮助和学习的。@RichardJohnson-事实上,我认为OP想要的是能够将这样的(非url)字符串转换为有效url的东西。+1用于猜测OP真正想要什么,但这仍然忽略了服务器发送的任何内容编码。是的,当使用
InputStreamReader
时,我总是设置编码,当我举出例子时,我总是忘记:)java在一边,服务器在另一边,http是一种协议。你需要一个不同的协议。FTP例如@Bozho如果我使用FTP,我是否能够使用FileReader和FileWriter在远程服务器上托管的文件上进行写入?否。您必须使用完全不同的库。我想使用FileWriter更改服务器上文件的内容(使用小程序时)。托管文件的地址是一个字符串,所以我想将其更改为url/uri
File file = new File("www.mywebsite.com/firefox.txt");
URL url = file.toURI().toURL();