我正在尝试从联机文本文件中读取一些单词。
我试着做一些类似的事情
File file = new File("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner scan = new Scanner(file);
但它不起作用,我得到
http://www.puzzlers.org/pub/wordlists/pocket.txt
作为输出,我只想得到所有的单词。
我知道他们以前教过我这个,但我现在不记得该怎么做了,非常感谢他们的帮助。
对于不在本地计算机上的任何访问,请使用URL
而不是File
。
URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner s = new Scanner(url.openStream());
事实上,URL通常更有用,也适用于本地访问(使用file:
URL)、jar文件以及可以以某种方式检索的所有内容。
上面的方法解释了平台默认编码中的文件。如果你想使用服务器指示的编码,你必须使用URLConnection并解析它的内容类型,就像这个问题的答案中所指示的那样。
关于您的错误,请确保您的文件编译时没有任何错误-您需要处理异常。单击IDE给出的红色消息,它应该向您显示如何修复它的建议。不要启动不编译的程序(即使IDE允许这样做)。
以下是一些异常处理示例:
try {
URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner s = new Scanner(url.openStream());
// read from your scanner
}
catch(IOException ex) {
// there was some connection problem, or the file did not exist on the server,
// or your URL was not in the right format.
// think about what to do now, and put it here.
ex.printStackTrace(); // for now, simply output it.
}
尝试类似的东西
URL u = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
InputStream in = u.openStream();
然后将其用作任何普通的旧输入流
真正对我有用的是:(来源:oracle文档"reading url")
import java.net.*;
import java.io.*;
public class UrlTextfile {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://yoursite.com/yourfile.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
使用Apache Commons IO
:
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public static String readURLToString(String url) throws IOException
{
try (InputStream inputStream = new URL(url).openStream())
{
return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
}
使用此代码将Internet资源读取到String
:
public static String readToString(String targetURL) throws IOException
{
URL url = new URL(targetURL);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(url.openStream()));
StringBuilder stringBuilder = new StringBuilder();
String inputLine;
while ((inputLine = bufferedReader.readLine()) != null)
{
stringBuilder.append(inputLine);
stringBuilder.append(System.lineSeparator());
}
bufferedReader.close();
return stringBuilder.toString().trim();
}
这是基于这里。
对于老式输入流,使用以下代码:
InputStream in = new URL("http://google.com/").openConnection().getInputStream();
我以以下方式对图像进行了处理,您应该能够使用类似的步骤对文本进行处理。
// folder & name of image on PC
File fileObj = new File("C:\Displayable\imgcopy.jpg");
Boolean testB = fileObj.createNewFile();
System.out.println("Test this file eeeeeeeeeeeeeeeeeeee "+testB);
// image on server
URL url = new URL("http://localhost:8181/POPTEST2/imgone.jpg");
InputStream webIS = url.openStream();
FileOutputStream fo = new FileOutputStream(fileObj);
int c = 0;
do {
c = webIS.read();
System.out.println("==============> " + c);
if (c !=-1) {
fo.write((byte) c);
}
} while(c != -1);
webIS.close();
fo.close();
或者,您可以使用Guava的资源对象:
URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
List<String> lines = Resources.readLines(url, Charsets.UTF_8);
lines.forEach(System.out::println);
已更正的方法现在已弃用。它提供了选项private WeakReference<MyActivity> activityReference;
这里的解决方案将是有用的。