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 {
     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接口数据的实现方法就是小编分享给大家的全部内容

转载于:https://www.cnblogs.com/MaxElephant/p/8177576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值