我的Java独立应用程序从用户获取一个URL(指向一个文件),我需要点击它并下载它.我面临的问题是我无法正确编码HTTP URL地址......
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdf
java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
回报我:
http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf
Run Code Online (Sandbox Code Playgroud)
但是,我想要的是
http://search.barnesandnoble.com/booksearch/first%20book.pdf
Run Code Online (Sandbox Code Playgroud)
(空间由%20取代)
我猜URLEncoder不是为了编码HTTP URL而设计的... JavaDoc说"用于HTML表单编码的实用程序类"......有没有其他方法可以做到这一点?
我创建了一个可执行jar并使用commons-cli为用户提供了在启动客户端时指定命令行参数的能力.一切正常.但是,当我打印jar的用法语句时,我想显示以下内容:
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
Run Code Online (Sandbox Code Playgroud)
使用commons-cli可以轻松打印所有选项.然而,"使用"线是头部刮擦.我似乎无法找到从args []获取传递给应用程序的"myprog.jar"名称的方法.
这有什么简单的方法吗?我可以使用一个非常复杂的方法从我的类的类加载器返回跟踪并找出它是否包含在jar中,但这似乎是一个相当难看的答案,应该是一个非常简单的问题.
private String getPath(Class cls) {
String cn = cls.getName();
String rn = cn.replace('.', '/') + ".class";
String path =
getClass().getClassLoader().getResource(rn).getPath();
int ix = path.indexOf("!");
if(ix >= 0) {
return path.substring(0, ix);
} else {
return path;
}
}
Run Code Online (Sandbox Code Playgroud) 我看到它java.net.URLDecoder.decode(String)在6 中被弃用了.
我有以下字符串:
String url ="http://172.20.4.60/jsfweb/cat/%D7%9C%D7%97%D7%9E%D7%99%D7%9D_%D7%A8%D7%92%D7%99%D7%9C%D7%99%D7%9"
Run Code Online (Sandbox Code Playgroud)
我应该如何在Java 6中解码它?
如何解析动态字符串值以创建URL实例?我需要用空格%20,重音符号,非ASCII字符替换空格......?
我尝试使用,URLEncoder但它也编码/字符,如果我给URLEncoderURL构造函数编码一个字符串,我得到一个MalformedURLException(没有协议).
我有一个java程序,它应该从URL读取文件(URL位置是IIS网站下的虚拟目录;下面,在我的初始测试中,我将其视为任何其他文件系统位置).不幸的是,所有需要读取的文件的路径都包含一个目录名中的井号(#),而我无法改变它.当(作为测试)我将它指向路径中没有英镑符号的位置时,该程序可以很好地工作.
我首先从传递给程序的字符串创建一个URL.对于像/Documents/#2012/09/11(文件是Windows共享)这样的文件路径,如果我在命令行上传递了这样的路径,我可以让程序成功处理:
file://serverIPaddress/Documents/\%232012/09/07/16/DOC4671179.DOC
Run Code Online (Sandbox Code Playgroud)
也就是说,用英镑符号手动编码为%23,并且反斜杠转移%23的%.
获取该URL只有一行:
URL url = new URL(filePath); // filePath is passed in
Run Code Online (Sandbox Code Playgroud)
但是这个程序不会被这样的编码路径用勺子喂食,所以我不得不弄清楚如何以编程方式对井号进行编码.继续找到关于如何编码URL以避免java中的特殊字符的好建议,我使用多参数构造函数创建了一个URI(我将已传递给程序的参数分解为三个单独的参数以适应该更改) .这是看起来像:
URI uri = new URI(protocol, host, filePath, null); // all values are passed in
Run Code Online (Sandbox Code Playgroud)
这恰好编码了英镑符号; 我的URI是:
file://serverIPaddress/Documents/%232012/09/07/16/DOC4671179.DOC
Run Code Online (Sandbox Code Playgroud)
但是如果没有前面的反斜杠%23,程序就会回来Connection refused,大概是因为它没有反斜杠的好处而误解了路径.
所以我想,好吧,我会自己添加反斜杠.我创建了相同的URI,提取了它的rawPath,并且通过一些字符串操作,在%23前面加了一个反斜杠.然后我使用新字符串创建了一个新的URI:
URI uri = new URI(protocol, host, filePath, null); // all values are passed in
String rawPath = uri.getRawPath();
int pctPos = rawPath.indexOf("%");
String escaped = new String("\\");
String firstPart = rawPath.substring(0,pctPos);
String secondPart …Run Code Online (Sandbox Code Playgroud) 我有在线档案.我正在尝试使用它media player using live streaming.但媒体播放器给出了一个error (-1,1004)
我认为我的媒体播放器没有得到正确的URL,因为它包含阿拉伯字符,所以我尝试使用Html.encode或UrlEncoder类编码它仍然得到相同的错误.
所以最后我在webview中加载了这个url,在页面加载完成后我将网页url传递给了媒体播放器.
WebView webView = new WebView(SongActivity.this);
webView.setSoundEffectsEnabled(false);
webView.loadUrl("MY URL");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
try {
playerService.startPlay(url );// this passes url to media player and url will be played using media player
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
public void onPageStarted(WebView view, String url,
android.graphics.Bitmap favicon) {
System.out.println("Decoding url:" …Run Code Online (Sandbox Code Playgroud)