2016年10月20日 星期四

FileZella Server 架設 FileZella Client 連線 (本機連本機)

參考:https://steachs.com/archives/1690
FileZilla Server小檔案:
官方網站:http://filezilla-project.org
軟體版本:0.9.36
軟體語系:英文
支援系統:Windows XP/Vista/7
軟體下載:官方下載

步驟說明:
1.安裝FileZella Server (本機當作Server )
2.指定某資料夾做為分享資源
3.安裝FileZella Client 
4.進行連線,看是否能抓取到『Server分享的資料夾資源』

1.安裝:
1.在安裝時會有一個選單是選擇開機啟動
2.開機不啟動(手動)
3.不安裝服務自動啟動伺服(不建議)
而下方是設定FTP使用的port要佔用哪一個(預設14147)



啟動設定,建議不用變更,依預設即可。



2.第一次啟動時
1.『設定IP位址』(範例設為本機)
2.『port』
3.『管理者密碼』



3.設定使用者群組(可先忽略)
在設定使用者之前,我們可以先設定群組,這樣可以統一分類,點擊二個人頭的圖示,開啟視窗後點擊「Add」輸入群組名確定即可。



4.設定要分享的資料夾
切換到「Shared folders」,設定client登入後的預設資料夾在哪,一樣點擊「Add」再選擇要讓使用者登入的資料夾即可。



5.分享資料夾權限設定
分為Files(檔案)及Directories(資料夾),預設是可以看到清單及讀取,如果你是要讓人可以寫入及建立資料夾等權限,可以依個人需求勾選。



6.建立使用者至群組(重要步驟,可直接新增跳過群組)
建立好群組後,點擊一顆頭的圖示,點擊「Add」,輸入使用者名稱,再選擇群組,這樣就將使用者加入群組完成。



再來就可以勾選擇使用者的「Password」再輸入要幫使用者設定的密碼,確認後就可以試看看用剛建立的帳密登入試試。



7.其他設定-各別帳號設定資料夾權限
像設定群組一樣,切換到Shared folders再新增資料夾並設定權限即可。



Speed Limits可設定限速,連線規則等等,可各別設定上傳及下載。





8.FileZella Client 登入測試
登入IP:127.0.0.1  (Server IP 因為server開在本機所以是127.0.0.1)
user:scorpio
pw:*******
Port:21 (預設)



連線畫面

2016年10月18日 星期二

Log4j Java 使用xml設定檔

環境
-Intelj13
-log4j1.2.17

範例實作
1.匯入lo4j jar檔







2.建立log4j.xml 設定檔
- 設定檔名稱『一定要叫log4j』,否則系統會抓取不到
- 開頭前2行做為log4j設定檔的宣告
- 所有設定放在log4j:configuration中
- 放在專案src下方









<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  <!--宣告log4j.xml的文件型別定義(Document Type Definition, DTD)-->

<!--所有log4j的設定都必須放在 <log4j:configuration>...</log4j:configuration>之內 -->
<log4j:configuration>
</log4j:configuration>

3.Log要輸出到哪裡??要長甚麼樣子??,appender設定
(放在
log4j:configuration中)

- Append 定義 log message 『輸出的裝置』及 『log 內容格式』
- log4j.xml 可以設定多個append
    <appender name="Console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout"> <!-- 設定appender的layout為PatternLayout -->
            <!-- 設定layout的pattern,參數名為conversionPattern,value為想要的輸出格式 -->
            <param name="conversionPattern"
                   value="%-d{yyyy-MM-dd HH:mm:ss} [%C{5}]-[%p] %m%n"/>
        </layout>
    </appender>
    <!-- DailyRollingFileAppender的第一個log檔並不會加上DatePattern的樣式,
                     必須在下一次週期產生的log檔才會加上DatePattern的樣式。
                     所以基本上當天產生的log檔算是第一次的log檔,並不會加上Pattern樣式-->

    <appender name="File" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="D:\system_notice.txt" /> <!--檔案路徑-->
        <!--DatePattern是DailyRollingFileAppender的一個重要參數,用來設定檔案輸出的週期-->
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />  
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%C{5}]-[%p] %m%n" />
        </layout>
    </appender>
4.檔案與Log設定的配對(本範例有三種) logger設定(放在log4j:configuration中)
- 補充-概念等於希望把log印出至console也要同時輸出至檔案
<appender-ref ref="Console"/>
<appender-ref ref="File"/> 
- 全專案套用
- 某個資料夾全部套用
- 指定要使用哪個Logger
    <!--RootLogger(全專案套用)-->
    <!--rootLogger的LEVEL設定為DEBUG,DEBUG以上等級的資訊也都會寫出-->
    <!--主要class搭配:public static Logger logger = Logger.getLogger(MyPractice.class);-->
    <root>
    <priority value="DEBUG"/> <!--印出INFO以上的資訊-->
    <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
    <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender-->
    </root>
    <!--整個資料夾套用-->
    <!--main class搭配:public static Logger logger = Logger.getLogger("MyPractice.class");-->
    <logger name="MyTest"> <!--指定的資料夾-->
        <level value="ERROR"/> <!--印出ERROR以上的資訊-->
        <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
        <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender-->
    </logger>
    <!--指定要哪個Logger設定-->
    <!--class搭配:public static Logger logger = Logger.getLogger("aa");-->
    <logger name="aa"> //替logger取名稱
    <level value="INFO"/> <!--印出INFO以上的資訊-->
    <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
    <appender-ref ref="File"/>    <!--將rootLogger的appender參考至剛設定好的File appender-->
    </logger>
5.Java檔實際執行記錄
public class MyPractice{
    public static Logger logger = Logger.getLogger(MyPractice.class);
    public static Logger logger2 = Logger.getLogger("aa");
    public static void main(String[] args) {
        int num = 0;
        try {
            System.out.println(num/0);
        } catch (Exception e) {
            System.out.println(e);
            logger.debug("Here is some DEBUG");
            logger.info("Here is some INFO");
            logger.warn("Here is some WARN");
            logger.error("Here is some ERROR");
            logger.fatal("Here is some FATAL");
            logger2.debug("Here is some aa logger");
            logger2.info("Here is some aa logger");
        }
    }
}

2016年10月10日 星期一

String VS. StringBuffer VS. StringBuilder

1.參考來源:
- http://blog.xuite.net/jane17512001/PenguinDesign/116288109-%E5%AD%97%E4%B8%B2%E8%99%95%E7%90%86(String%E3%80%81StringBuilder%E3%80%81StringBuffer)

- http://puremonkey2010.blogspot.tw/2011/11/java-string-stringbuffer-stringbuilder.html

2.特性介紹:
- String
每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然後將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因為每次生成對像都會對系統性能產生影響

- StringBuffer
每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer 
(Java.lang.StringBuffer 可將字符串緩衝區安全地用於多個線程。可以在必要時對這些方法進行同步)

-StringBuilder
從 JDK 5.0 開始,為該類增添了一個單個線程使用的等價類,即 StringBuilder 。與 StringBuffer 相比,通常應該優先使用 StringBuilder 類,因為它支持所有相同的操作,但由於它不執行同步,所以速度更快!

3.結論(效率)
1.在大部分情況下 StringBuffer > String 
例外情況:
- String 較快
String S1 = "This is only a" + "simple" + "test";  
- String 較慢
String S2 = "This is only a";  
String S3 = "simple";  
String S4 = "test";  
String S1 = S2 +S3 + S4;

2.在不考慮多執行緒的情況下 StringBuilder > StringBuffer ,因為它支持所有相同的操作,但由於它不執行同步,所以速度更快!