和安卓是一个道理,读取json数据
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 { URL url = new URL( "http://localhost/test.php?action=showApacheLogs" ); 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接口数据的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。