一个人的hackson:study – php server

从极客学院上获取学习的内容。正好认证了手机有两天的vip,现在开始学习 Android项目开发实战:新闻客户端。
原来已经搭建好了php+Apache+mysql的环境,所以php的环境可以直接使用。省去很多麻烦事,视频上也省略了这部分内容。
根据视频,首先使用php环境作为服务端生成客户端所需要的json数据。当时搭建环境的时候php基本选择了最新的版本,按照视频里的教程,出现了一些deprecated的方法用法,根据网络资料对其进行修改,主要是mysql_connect相关的方法,如mysql_connect和mysql_query需要分别修改为mysqli_connect和mysqli_query方法,同时参数列表也不太一样。
其次,是php语法是较早之前的时候学的了,现在有些不熟悉,比如查询结果的遍历,和给数组赋值,对array函数印象不深,结果导致一开始就写了一个arr就完事,导致执行出错。对数组这块的操作仍然需要更加熟悉一点。
修正掉以上的内容之后,我的服务端能跟视频内一样返回一开始插入数据库的数据的json字符串了。继续。
 
至此,服务端返回新闻列表数据的部分已经完成。下一日志继续。

转载:读取.properties配置文件

一、前言                              
Java工程中想log4j、数据库连接等配置信息一般都写在.properties文件中,那么如何读取这些配置信息呢?下面把相关方法记录下来供以后查阅。
 
二、.properties文件                        
配置文件的一种,内容以键值对的形式存在,且每个键值对独占一行。#号作为行注释的起始标志,中文注释会自动进行unicode编码。示例:

# ip and port of server socket
ip=127.0.0.1
port=9999
# error message
msg=I'm sorry, bye bye!

假设上述内容存储在config.properties文件下,且bin目录结果如下:

  bin
|– main
|– Demo.class
|– config.properties

后续章节的示例将以上述内容作为目标对象来操作。
 
三、通过 Properties对象 操作                    
读取属性,示例:

复制代码
public class Demo{
  public static void main(String[] args){
    Properties props = new Properties();
    InputStream in = Demo.class.getResourceAsStream("../config.properties");
    // 或使用文件输入流(不推荐),假设当前工作目录为bin
    //InputStream in = new FileInputStream("./config.properties");
    props.load(in);
    in.close();
    // 读取特定属性
    String key = "ip";
    String ip = props.getProperty(key);
    // 遍历所有属性,方式一
    Set keys = props.keySet();
    for (Interator it = keys.iterator(); it.hasNext();){
        String k = it.next();
        System.out.println(k + ":" + props.getProperty(k));
    }
     // 遍历所有属性,方式二
    Enumeration en = props.propertyNames();
    while (en.hasMoreElements()){
        String k = en.nextElement();
        System.out.println(k + ":" + props.getProperty(k));
    }
  }
}
复制代码

1. 通过 Demo.class.getResourceAsStream(“../config.properties”); 读取配置文件,配置文件的相对路径以类文件所在目录作为当前目录。
2. 通过 new FileInputStream(“./config.properties”); 读取配置文件,配置文件的相对路径以工作目录(可以通过 System.getProperty(“user.dir”) 获取工作目录)作为当前目录。
注意:上述两种方式获取的配置文件均没有被缓存。每次都要重新加载配置文件。
写属性,示例:

复制代码
Properties props = new Properties();
InputStream in = getClass().getResouceAsStream("properties文件相对于当前类加载路径的文件目录");
props.load(in);
OutputStream output = new FileOutputStream("properties文件路径");
props.setProperty("ip", "10.248.112.123"); // 修改或新增属性键值对
props.store(output, "modify ip value"); // store(OutputStream output, String comment)将修改结果写入输出流
output.close()
复制代码

 
四、通过 ResourceBundle对象 操作                    
通过该方式仅能读取配置文件而已,不能进行写操作。示例:

// ResourceBundle rb = ResourceBundle.getBundle("配置文件相对工程根目录的相对路径(不含扩展名)");
ResourceBundle rb = ResourceBundle.getBundle("config");
try{
    String name = rb.getString("name");
}
catch(MissingResourceException ex){

注意:上述方式会缓存配置文件信息,后续读取时均是读取缓存中的内容,若在此期间修改了配置内容是无法实时同步的
ResourceBundle有两个子类ListResourceBundle和PropertyResourceBundle,在读取properties文件时实际上是使用PropertyResourceBundle来处理。
题外话:
ResourceBundle主要用于解决国际化和本地化问题。通过资源命名定义各语言和方言的信息,然乎程序在运行时获取当前本地化信息,并根据本地化信息加载相应的资源完成本地化。
资源命名规范:

复制代码
// 仅含家族名
MyResource
// 含家族名和语言
MyResource_en
// 含家族名、语言和国家
MyResource_en_US
复制代码

对应的Java代码:

// ResourceBundle首先会根据语言和国家的本地化信息去查找资源(假设现在要查找MyResource_zh_CN),当找不到时就会找MyResource_zh,再找不到就用MyResource。
ResourceBundle rb = ResourceBundle.getBundle("MyResource", Locale.getDefault())

 
五、总结                              
当然方式不止这些啦,日后继续补充!
尊重原创,转载请注明来自:https://www.cnblogs.com/fsjohnhuang/p/3995386.html  ^_^肥仔John
 
六、参考                              
https://www.cnblogs.com/panjun-Donet/archive/2009/07/17/1525597.html

java路径问题-getClass().getResourceAsStream()

src(源文件夹)

┣━11.properties

┗━myspider(myspider包)

┣━22.properties
┗━Test.java
 

Java代码  收藏代码
  1. package myspider;
  2. import java.io.UnsupportedEncodingException;
  3. /**
  4.  *
  5.  * @author mark
  6.  */
  7. public class Test {
  8.     public static void main(String[] args) throws UnsupportedEncodingException{
  9.         Test t=new Test();
  10.         //文件名前不加“/”,则表示从当前类所在的包下查找该资源。如下则表示的是从包myspider下查找22.properties文件资源。
  11.         System.out.println(“1:”+t.getClass().getResourceAsStream(“22.properties”));//输出java.io.BufferedInputStream@61de33
  12.         //文件名前加了“/”,则表示从类路径下也就是从classes文件夹下查找资源,如下表示从classes文件夹下查找22.properties文件资源。
  13.         System.out.println(“2:”+t.getClass().getResourceAsStream(“/22.properties”));//输出null
  14.         //文件名前加了“/”,则表示从类路径下也就是从classes文件夹下查找资源,如下表示从classes文件夹下查找11.properties文件资源。
  15.         System.out.println(“3:”+t.getClass().getResourceAsStream(“/11.properties”));//输出java.io.BufferedInputStream@14318bb
  16.         System.out.println();
  17.         //当前包路径4:file:/E:/myobject/myspider/build/classes/myspider/
  18.         System.out.println(“4:”+t.getClass().getResource(“”));
  19.         //输出当前类路径5:file:/E:/myobject/myspider/build/classes/
  20.         System.out.println(“5:”+t.getClass().getResource(“/”));
  21.         /*
  22.          * 如果类路径下的当前包有22.properties文件,则输出6:file:/E:/myobject/myspider/build/classes/myspider/22.properties
  23.          * 否者输出源文件下的22.properties文件的路径,则输出:6:file:/E:/myobject/myspider/src/myspider/22.properties
  24.          */
  25.         System.out.println(“6:”+t.getClass().getResource(“22.properties”));
  26.         /*
  27.          * 如果类路径下有11.properties文件,则输出7:file:/E:/myobject/myspider/build/classes/11.properties
  28.          * 否者输出源文件下的11.properties文件的路径,则输出:6:7:file:/E:/myobject/myspider/src/11.properties
  29.          */
  30.         System.out.println(“7:”+t.getClass().getResource(“/11.properties”));
  31.     }
  32. }