1. 我的idea文件的结构:
在其中有两个FileGetTest.java文件,一个在java文件夹下,一个在/java/pathtest文件夹下,在其中运行如下代码:
File directory = new File("");//设定为当前文件夹
System.out.println(directory.getCanonicalPath());//获取标准的路径
System.out.println(directory.getAbsolutePath());//获取绝对路径
//创建文件
File file = new File("eab.xml");
if (!file.exists()) {
file.createNewFile();
}
运行结果都一样:
/Users/simon/IdeaProjects/eurekatest
/Users/simon/IdeaProjects/eurekatest
创建的文件也在根目录下:
2.在idea中用maven构建项目,默认的存放资源文件的文件夹是resources, maven会在构建时将文件夹中的文件拷贝到target/classes目录下:
编译后ehcache.xml文件被自动拷贝到target/classes文件夹下,如下图:
如需在程序中读取该配置文件, 文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!-- 默认缓存配置 ,缓存名称为 default -->
<defaultCache maxElementsInMemory="50" eternal="false"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
<!-- 自定义缓存,名称为lt.ehcache -->
<cache name="lt.ecache" maxElementsInMemory="50" eternal="false"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
</ehcache>
第一种方法:
import java.io.*;
public class EhCacheTest {
public static void main(String[] args) throws Exception{
InputStream input = EhCacheTest.class.getClassLoader().getResourceAsStream("ehcache.xml");
System.out.println(convertStreamToString(input));
}
public static String convertStreamToString(InputStream is) {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
运行结果,可以读出该文件,并打印在控制台上:
第二种方法,只是更改第一行语句:
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("ehcache.xml");
效果是一样的
第三种:
InputStream input = EhCacheTest.class.getResourceAsStream("ehcache.xml");
以上方法都可以取得配置文件的信息,当然也可以调用getResouce()方法,该方法返回一个文件的URL, 许多类都支持使用该参数来读入配置文件,如Ehcache中的CacheManager类中的create()方法:
import java.io.*;
import java.net.URL;
import java.util.List;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class EhCacheTest {
public static void main(String[] args) throws Exception{
URL input = EhCacheTest.class.getResource("ehcache.xml");
CacheManager manager = CacheManager.create(input);
//创建Cache对象
Cache cache = manager.getCache("lt.ecache");
//cache缓存名称
System.out.println("cache name: " + cache.getName());
//将对象放入缓存
Element element = new Element("hello", "world");
Element element2 = new Element("aaa", "111");
Element element3 = new Element("bbb", "222");
Element element4 = new Element("bbb", "222");
cache.put(element);
cache.put(element2);
cache.put(element3);
cache.put(element4);//key相同时会被覆盖
//cache缓存对象个数
System.out.println("size: " + cache.getSize());
// 从cache中取回元素
System.out.println("hello: " + cache.get("hello").getValue());
List<String> keys = cache.getKeys();//所有缓存对象的key
// 遍历所有缓存对象
for(String key : keys ){
System.out.println(key + " : " + cache.get(key));
}
// 从Cache中移除一个元素
System.out.println(cache.remove("hello"));
System.out.println(cache.remove("hello2"));
//移除所有缓存对象
cache.removeAll();
System.out.println("size: " + cache.getSize());
manager.shutdown();
}
}
也可以在代码中配置:
import java.io.*;
import java.net.URL;
import java.util.List;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.store.MemoryStoreEvictionPolicy;
public class EhCacheTest {
public static void main(String[] args) throws Exception{
CacheConfiguration cacheConfig = new CacheConfiguration("lt.ecache", 50)
.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU) // 设置调度算法
.overflowToDisk(true) // 设置是否缓存到硬盘
.eternal(false) // 设置是否过期
.timeToLiveSeconds(60) // 对象存活时间
.timeToIdleSeconds(30) // 调度设置最大不活动时间
.diskPersistent(false) // 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
.diskExpiryThreadIntervalSeconds(0);// 设置对象检测线程运行时间间隔
Configuration config = new Configuration();
config.addCache(cacheConfig);
CacheManager manager = CacheManager.create(config);
// CacheManager manager = CacheManager.create(input);
//创建Cache对象
Cache cache = manager.getCache("lt.ecache");
//cache缓存名称
System.out.println("cache name: " + cache.getName());
//将对象放入缓存
Element element = new Element("hello", "world");
Element element2 = new Element("aaa", "111");
Element element3 = new Element("bbb", "222");
Element element4 = new Element("bbb", "222");
cache.put(element);
cache.put(element2);
cache.put(element3);
cache.put(element4);//key相同时会被覆盖
//cache缓存对象个数
System.out.println("size: " + cache.getSize());
// 从cache中取回元素
System.out.println("hello: " + cache.get("hello").getValue());
List<String> keys = cache.getKeys();//所有缓存对象的key
// 遍历所有缓存对象
for(String key : keys ){
System.out.println(key + " : " + cache.get(key));
}
// 从Cache中移除一个元素
System.out.println(cache.remove("hello"));
System.out.println(cache.remove("hello2"));
//移除所有缓存对象
cache.removeAll();
System.out.println("size: " + cache.getSize());
manager.shutdown();
}
}
参考的文章: