java读取PHP接口数据的实现方法(四)
PHP文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
<?php class Test{ //日志路径 const LOG_PATH= "E:\phpServer\Apache\logs\\error.log" ; //显示的行数 const PAGES=50; public static function main(){ header( "content-type:text/html;charset=utf-8" ); if (! empty ( $_GET [ 'action' ])){ if (!method_exists( 'Test' , $_GET [ 'action' ])){ echo "404" ; } else { self:: $_GET [ 'action' ](); } exit ; } } public static function showApacheLogs(){ $test = new Test(); $result = $test ->readLogs(self::LOG_PATH,self::PAGES); $json = array (); for ( $i =0; $i < count ( $result ); $i ++){ $line = $result [ $i ]; //注意这里,如果处理会json解析失败 $line = str_replace ( "\r\n" , "" , $line ); $result [ $i ]= array ( "num" => $i +1, "msg" =>urlencode( $line )); } $str = stripslashes (urldecode(json_encode( $result ))); echo $str ; } /** * 读取日志 */ private function readLogs( $filePath , $num =20){ $fp = fopen ( $filePath , "r" ); $pos = -2; $eof = "" ; $head = false; //当总行数小于Num时,判断是否到第一行了 $lines = array (); while ( $num >0){ while ( $eof != "\n" ){ if ( fseek ( $fp , $pos , SEEK_END)==0){ //fseek成功返回0,失败返回-1 $eof = fgetc ( $fp ); $pos --; } else { //当到达第一行,行首时,设置$pos失败 fseek ( $fp ,0,SEEK_SET); $head = true; //到达文件头部,开关打开 break ; } } array_unshift ( $lines , fgets ( $fp )); if ( $head ){ break ; } //这一句,只能放上一句后,因为到文件头后,把第一行读取出来再跳出整个循环 $eof = "" ; $num --; } fclose( $fp ); return array_reverse ( $lines ); } } Test::main(); |
java文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONArray; import org.json.JSONObject; public class ReadLogs { public static void main(String[] args) throws Exception { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout( 10000 ); conn.setRequestMethod( "GET" ); conn.setDoInput( true ); conn.setDoOutput( true ); // 输出返回结果 InputStream input = conn.getInputStream(); int resLen = 0 ; byte [] res = new byte [ 1024 ]; StringBuilder sb= new StringBuilder(); while ((resLen=input.read(res))!=- 1 ){ sb.append( new String(res, 0 , resLen)); } String jsonStr=sb.toString(); //String转换成JSON JSONArray jsonArray= new JSONArray(jsonStr); for ( int i= 0 ;i<jsonArray.length();i++){ JSONObject jsonObject= new JSONObject(jsonArray.getString(i)); String msg=(String) jsonObject.get( "msg" ); int num=( int ) jsonObject.get( "num" ); System.out.println(num+ ":" +msg); } } } |
以上这篇java读取PHP接口数据的实现方法就是小编分享给大家的全部内容
java读取PHP接口数据的实现方法(四)的更多相关文章
- [PHP] java读取PHP接口数据
和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\\ ...
- JAVA的List接口的remove重载方法调用原理
前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引inde ...
- Java 读取clob字段的几种方法
Java 读取clob字段的几种方法 一.第一种 Clob clob = rs.getClob("remark");//Java.sql.Clob String detailinf ...
- java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)
java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...
- java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去
#java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...
- 通过java读取HDFS的数据 (转)
原文链接:通过java读取HDFS的数据 通过JAVA直接读取HDFS中的时候,一定会用到FSDataInputStream类,通过FSDataInputStream以流的形式从HDFS读数据代码如下 ...
- 【转载】java读取.properties配置文件的几种方法
读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...
- java 请求第三方接口 GET\POST 实现方法
(1)GET方法 /** * 根据高德地图api获取位置信息 * @return * */ public static String getMapAddInfo(String httpurl) { H ...
- Java读取Execl表格数据
在前面提到用java代码新建一个Execl 表格并添加数据到表格中, 这次写了一个读取Execl表格数据并添加导数据库中的案列 给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相 ...
随机推荐
- Django之views.py详解
http请求中产生的两个核心对象: http请求:HttpRequesthttp响应:HttpResponse 所在位置:from django.http import HttpRequest,Htt ...
- Antenna Placement---poj3020(最大匹配)
题目链接:http://poj.org/problem?id=3020 题意:每个 ‘*’都需要一个1*2的东西覆盖,问最少需要多少个1*2的东西来覆盖这些‘*’ 和Oil Skimming的题解几乎 ...
- Spring boot maven 搭建框架
Spring Boot:目的:这个框架帮助开发者更容易地创建基于Spring的应用程序和服务,使得pring开发者能够最快速地获得所需要的Spring功能.优点:完全不需要XML配置,让spring应 ...
- redis知识总汇
redis基础 django-redis redis数据操作详解 redis持久化
- DIY自己的GIS程序(2)——局部刷新
绘制线过移动鼠标程中绘制临时线段防闪烁 参考OpenS-CAD想实现绘制线的功能.希望实现绘制线的过程,在移动线的时候没有闪烁和花屏.但是出现了问题,困扰了2天,前天熬的太晚,搞得现在精力都没有恢复. ...
- [py][mx]django实现课程机构排名
如果是第一次做这个玩意,说实话,确实不知道怎么弄, 做一次后就有感觉了 此前我们已经完成了: 分类筛选 分页 这次我们做的是 课程机构排名 知识点: - 按照点击数从大到小排名, 取出前三名 hot_ ...
- 爬取51job职位信息之编码问题
兴趣来潮,爬了下51job,但是遇到编码问题!以下是简单的一段代码 获取整个页面数据 # -*- coding:utf-8 -*- import requests import sysreload(s ...
- 小论“Boolean参数作为入参”的函数
<Clean Code>一书中对于如何写好函数有着很动人的描写,其中对于函数参数的建议有如下两点: 函数参数的数量应该尽可能少 给一个一元函数传入bool类型的参数很"罪恶&qu ...
- cocos代码研究(10)ActionEase子类学习笔记
理论部分 缓动动作的基类,继承自 ActionInterval类.ActionEase本身是一个抽象的概念父类,开发者最好不要在代码中直接创建它的对象,因为它没有具体的执行效果,这一类的子类速度变化大 ...
- 使用RequireJS并实现一个自己的模块加载器 (二)
2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...