<%
URL url=new URL("http://localhost:8080/upload/markers.txt");
InputStream inputStream=url.openStream();
BufferedInputStream bis=new BufferedInputStream(inputStream);
ByteArrayOutputStream buf =new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
buf.write((byte) result);
result = bis.read();
}
String str = buf.toString();
System.out.println(str);
%>
其中markers.txt为ANSI编码 :
当文件名中有中文字符时,可能会出现错误:
new URL("http://localhost:8080/upload/test.txt").openStream();
new URL("http://localhost:8080/upload/test无空格.txt").openStream();
new URL("http://localhost:8080/upload/test 英文 中文空格.txt").openStream();
将以上地址在浏览器中打开,发现其请求网址是经过转码的:
如果将java中的地址换成转码后的请求网址,则不会出现异常(这里异常出现在含有空格的下一行上);
?因此在程序中需要将文件名转码(‘utf-8’),使其与浏览器中的转码一致:
new URL("http://localhost:8080/upload/test.txt").openStream();
//new URL("http://localhost:8080/upload/test无空格.txt").openStream();
String encodedFile1=URLEncoder.encode("test无空格.txt", "utf-8");
System.out.println("encodedFile1: "+encodedFile1);
new URL("http://localhost:8080/upload/"+encodedFile1).openStream();
//new URL("http://localhost:8080/upload/test 英文 中文空格.txt").openStream();
String encodedFile2=URLEncoder.encode("test 英文 中文空格.txt", "utf-8");
System.out.println("encodedFile2: "+encodedFile2);
new URL("http://localhost:8080/upload/"+encodedFile2).openStream();
这里由于下一个文件名有空格的原因,又会报错?,再次在浏览器中查看:
这里空格被转换成了%20,而以上程序中的输出为+。若要不报错,需要在程序中转换后再把+替换为%20即可。若文件名中有+呢?测试发现,原有的+号会被转换为%2B,因此替换不会对其造成影响:
String encodedFile2=URLEncoder.encode("test 英文 中文空格.txt", "utf-8").replace("+", "%20");
System.out.println("encodedFile2: "+encodedFile2);
new URL("http://localhost:8080/upload/"+encodedFile2).openStream();
String encodedFile3=URLEncoder.encode("test 英文 中文+空格.txt", "utf-8").replace("+", "%20");
System.out.println("encodedFile3: "+encodedFile3);
参考:
java new File 可以远程地址吗_mob649e816704bc的技术博客_51CTO博客