Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从换行符中给出的api获取数据_Java_Api_Newline_Fetch - Fatal编程技术网

Java 如何从换行符中给出的api获取数据

Java 如何从换行符中给出的api获取数据,java,api,newline,fetch,Java,Api,Newline,Fetch,我的程序的一部分目的是从以下api检索换行格式的数据:。数据与IP地址的地理位置有关,并以换行格式显示;我只想拉一些线。我不太熟悉Java中的url/文件I/o,当我研究它时,我有点不知所措。我能够访问我想要的数据,但我正在努力理解如何将其纳入我的程序 这是我的方法,用于访问数据、提取某些行,然后将其转换为变量以在类的其余部分中使用: public void getGeoLoc() { String locHolder; try { geoLocRetriever = new URL("

我的程序的一部分目的是从以下api检索换行格式的数据:。数据与IP地址的地理位置有关,并以换行格式显示;我只想拉一些线。我不太熟悉Java中的url/文件I/o,当我研究它时,我有点不知所措。我能够访问我想要的数据,但我正在努力理解如何将其纳入我的程序

这是我的方法,用于访问数据、提取某些行,然后将其转换为变量以在类的其余部分中使用:

public void getGeoLoc()
{
String locHolder;
try {
    geoLocRetriever = new URL("http://ip-api.com/line/" + MainDisplay.getAttackerIpHolder());
} catch (MalformedURLException e) {
    e.printStackTrace();
}
//BufferedReader in = new BufferedReader(new InputStreamReader(geoLocRetriever.openStream()));
}

任何输入或建议的教程都将不胜感激。

您将希望从流中读取所有数据

InputStream stream = geoLocRetriever.openStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
if (stream != null) try {
    final BufferedInputStream input = new BufferedInputStream(stream);
    final byte[] reader = new byte[16384];
    int r = 0;
    while ((r = input.read(reader, 0, 16384)) != -1)
        buffer.write(reader, 0, r);
    buffer.flush();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if(stream != null) try {
        stream.close();
    } catch(IOException e) {
        e.printStackTrace();
    }
}
将其转换为字符串

locHolder = new String(buffer.toByteArray());
然后可以使用
String.split
拆分行

String[] lines = locHolder.split("\n");

使用该选项,您可以分别读取行。

您将希望从流中读取所有数据

InputStream stream = geoLocRetriever.openStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
if (stream != null) try {
    final BufferedInputStream input = new BufferedInputStream(stream);
    final byte[] reader = new byte[16384];
    int r = 0;
    while ((r = input.read(reader, 0, 16384)) != -1)
        buffer.write(reader, 0, r);
    buffer.flush();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if(stream != null) try {
        stream.close();
    } catch(IOException e) {
        e.printStackTrace();
    }
}
将其转换为字符串

locHolder = new String(buffer.toByteArray());
然后可以使用
String.split
拆分行

String[] lines = locHolder.split("\n");

使用它,您可以单独阅读这些行。

谢谢!这很有帮助。我相信一旦我访问了url,这些行就已经被拆分了,在Java中有没有任何方法可以让我只读取某些行?这应该是api的一个示例输出:使用行,您可以访问单独的行。因此,
行[0]
将获得第一行,
行[1]
将获得第二行,依此类推。谢谢@Chase。但我很好奇,这是Java允许这种情况发生的唯一方式吗?也就是说,您必须阅读所有行,然后选择在您的程序中实际使用哪一行。在您访问内容之前,您必须阅读内容的任何语言。您可以跳过数据,直到遇到
\n
字符。但这并不是一件简单的事。忽略那些你不用的台词。您可以调用
行[4]
直接跳到第5行,而不必先查看其他行,然后您可以使用
行[1]
查看第2行。我一直在使用您建议的代码,它运行良好,我希望你能逐行解释正在发生的事情,这样我就能进一步扩展我对这个主题的理解。非常感谢。谢谢!这很有帮助。我相信一旦我访问了url,这些行就已经被拆分了,在Java中有没有任何方法可以让我只读取某些行?这应该是api的一个示例输出:使用行,您可以访问单独的行。因此,
行[0]
将获得第一行,
行[1]
将获得第二行,依此类推。谢谢@Chase。但我很好奇,这是Java允许这种情况发生的唯一方式吗?也就是说,您必须阅读所有行,然后选择在您的程序中实际使用哪一行。在您访问内容之前,您必须阅读内容的任何语言。您可以跳过数据,直到遇到
\n
字符。但这并不是一件简单的事。忽略那些你不用的台词。您可以调用
行[4]
直接跳到第5行,而不必先查看其他行,然后您可以使用
行[1]
查看第2行。我一直在使用您建议的代码,它运行良好,我希望你能逐行解释正在发生的事情,这样我就能进一步扩展我对这个主题的理解。非常感谢。这是44555 Java的问题,不客气:-)这是44555 Java的问题,不客气:-)