2016年9月21日 星期三

How to create file and directory in Java.

String filePath = "logs/test.log";
File file = new File(filePath);
此時如果直接createNewFile()
if(!file.exists())
{
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
會因為parent的資料夾不存在而失敗,而這時直接使用mkdirs()

if(!file.exists())
{
 file.mkdirs();
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
但這樣會把01.log也當成資料夾建立,就無法createNewFile,所以應該先切換到上層目錄再進行mkdirs()
if(!file.exists())
{
 file.getParentFile().mkdirs();
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}

2016年9月20日 星期二

取得螢幕實際寬高的方法

取得螢幕實際寬高的方法

基本上這方法就寫在官方的 doc 裡
網路搜尋的話也很容易找到
不過還是在此記錄一下
?
1
2
3
4
5
DisplayMetrics displaymetrics = new DisplayMetrics();
//使用 Activity 的 getWindowManager()獲得 WindowManager
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

主要就是在 Activity 裡利用 getWindowManager() 先取得系統唯一的 WindowManager
然後取得一個 DisplayMetrics 物件
這物件主要是存放解析度相關的屬性
包含 densityDpi, widthPixels, heightPixels ... 等

所以利用 DisplayMetrics 很簡單就得到螢幕實際像素了


WindowManager 除了透過 Activity 的 getWindowManager()獲得之外
還可以透過 Context 的 getSystemService(Context.WINDOW_SERVICE) 取得
所以 code 也可以這樣改
?
1
2
3
4
5
6
7
8
public static int[] getDisplayPixels(Context context){
 DisplayMetrics displaymetrics = new DisplayMetrics();
 WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 windowManager.getDefaultDisplay().getMetrics(displaymetrics);
 int width = displaymetrics.widthPixels;
 int height = displaymetrics.heightPixels;
 return new int[]{width, height};
}