idea下面遇到一個很煩的問題
問題簡述: 在從另外一個項目把src文件和web文件拷過來後竟然不能使用類路徑去讀取配置文件,反射生成對象。然後折騰了好久,後來對比之前的在idea上做的項目,把project structer在重新設置一下就ok了,成功解決問題。
解決方案
這裏的module結構一定要注意,這都是idea找資源,測試包的路徑,你一個不對,就報錯。然後一折騰就是幾個小時,很划不來。對於剛用idea的我就是,這些工具你不會用就很慢,然後你又想回到原來的舒適區,走老路子。這真的很打擊人啊!就是你想做卻做不到的趕腳。所以請仔細每一步操作。
2.關於tomcat輸出idea亂碼現象
網上查了很多資料都是改bin下面的兩個文件,這裏我就不說了,還改tomcat配置是的一個vm-option=Dfile-encoding=utf-8。可是我操作過後,還是亂碼。可是我把那Dfile…刪了過後在跑,竟然沒有亂碼了,但是我bin下面的文件還是加上了Dfile-encongding…所以也許別人走的過程不一定適合自己。根據別人的解決思路來找到自己的不足纔是解決問題的關鍵,你說呢?
3.關於加載resource文件的路徑代碼
這是我通過讀取配置文件取出類名的工具類
package com.yzz.uitl;
import com.google.common.collect.Maps;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
/**
* describe:
*
* @author yanzhizheng
* @date 2019//26
*/
public class PropertyUtil {
//緩存加載文件
private static Map<String, Properties> cache = Maps.newHashMap();
//獲取類名
public static String get(String configName, String key) {
return getProperties(configName).getProperty(key);
}
public static Properties getProperties(String configName){
if (cache.get(configName) != null) {
return cache.get(configName); //map中已經有對象了,直接返回去
}
//通過類路徑加載文件
InputStream inputStream =
PropertyUtil.class.getClassLoader().getResourceAsStream(configName);
Properties config = new Properties();
try {
config.load(inputStream);
}catch (IOException e) {
e.printStackTrace();
}
cache.put(configName,config);
return config;
}
}
通過反射生成對象的工廠類
package com.yzz.uitl;
import java.util.Properties;
/**
* describe:
*
* @author yanzhizheng
* @date 2019//25
*/
public class MyFactory {
public static Properties prop;
public static Object getObject(String filePath, String key) {
try {
String classPath = PropertyUtil.get(filePath, key); //獲取類路徑
if(classPath.equals("") || classPath == null) {
throw new Exception("類路徑不對");
}
Object obj = Class.forName(classPath).newInstance(); //反射獲取對象
return obj;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
總結:
遇到問題,真的不要煩,做事情遇到問題真的很常見,除非躺在牀上睡覺。自己解決不來就看看自己以前寫的東西,或者請教朋友和老師(他們真的是自己最好的資源)。