<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>一般程式 &#8211; 記下來</title>
	<atom:link href="https://noter.tw/code/program/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sun, 24 Jul 2022 03:38:34 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>一般程式 &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程</title>
		<link>https://noter.tw/8623/received-fatal-alert-handshake_failure/</link>
					<comments>https://noter.tw/8623/received-fatal-alert-handshake_failure/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 25 Jun 2021 08:54:43 +0000</pubDate>
				<category><![CDATA[程式開發]]></category>
		<category><![CDATA[一般程式]]></category>
		<category><![CDATA[javax.net.ssl.SSLHandshakeException]]></category>
		<category><![CDATA[Received fatal alert: handshake_failure]]></category>
		<category><![CDATA[handshake_failure]]></category>
		<category><![CDATA[java 1.7]]></category>
		<category><![CDATA[java 1.8]]></category>
		<category><![CDATA[jre]]></category>
		<category><![CDATA[java ssl error]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[Eclipse]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=8623</guid>

					<description><![CDATA[<p>小蛙的工作常常要維護很多有年代的系統，這些系統有些已經找不到源頭或甚至沒有文件留下來了，前一段時間一直碰到抓 https 的時候噴錯的狀況，這篇把這段很痛苦的經歷記錄下來，希望能幫助遇到相同問題的朋友&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/8623/received-fatal-alert-handshake_failure/" data-wpel-link="internal">javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙的工作常常要維護很多有年代的系統，這些系統有些已經找不到源頭或甚至沒有文件留下來了，前一段時間一直碰到抓 https 的時候噴錯的狀況，這篇把這段很痛苦的經歷記錄下來，希望能幫助遇到相同問題的朋友。</p>



<span id="more-8623"></span>



<p>早期很多網站都是 http 的，到現在各家大廠的推波助瀾下，你沒有 https 就被當作是不合群的、有危險的、跟不上潮流的網站(?!)，總之當有人上你的網站，但你的網站沒有 https 的時候，各大瀏覽器就會很不客氣的提示：您與這個網站的連線不安全，有些人看到這些提示怕都怕死了根本不敢連～</p>



<p>小蛙這次要處理的系統是早期抓網站圖片的工具，由於是早期開發的，當時幾乎都是 http 為主的網站，這支程式也完全沒有考慮 https 的問題 (當時合作的單位完全沒有 https)，這一兩年來這個問題慢慢顯露出來，有些要抓的網站也在我們自己單位，因此可以透過一些特殊的方法來處理，但是今天遇到 &#8230; 要抓外面單位的網站，這 &#8230; 折騰了小蛙一整天啊。</p>



<p class="pre left green">小蛙給一個最簡單卻也是最困難的建議：更新到 JRE 1.8</p>



<p>小蛙試了超多網路上找到的方法，如果你已經在網路上找很久了，那小蛙用的方法你一定都試過，應該也都還是失敗 &#8230; (跟小蛙一樣)，最後決定直接安裝 JRE 1.8。來看一下這討人厭的錯誤訊息</p>



<pre class="wp-block-preformatted withcode">Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
     at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
     at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
     at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)
     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
     at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
     at TESTSSL.downloadRemoteImage(TESTSSL.java:37)
     at TESTSSL.downloadRemoteImage(TESTSSL.java:53)
     at TESTSSL.main(TESTSSL.java:74)</pre>



<p>直接看小蛙 Eclipse 的設定，Compiler 的地方使用 1.7 </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/ACtC-3e9Jzy_2bG9HQE6aGNsNevI25pm7FJoS7MK_g-QL-g7O5Ho40-uzMk3igXTjhZYUpuQ9ja4_KPfJDxNq2Ei60AJbo6GWbhyk5GWis4JIZMNARbGNOWPta4CUK-uMW2VcqeDKyD1UdxsuyqdEUxCKI0Q8Q=w831-h788-no?authuser=2" alt="ACtC 3e9Jzy 2bG9HQE6aGNsNevI25pm7FJoS7MK g QL g7O5Ho40 uzMk3igXTjhZYUpuQ9ja4 KPfJDxNq2Ei60AJbo6GWbhyk5GWis4JIZMNARbGNOWPta4CUK uMW2VcqeDKyD1UdxsuyqdEUxCKI0Q8Q=w831 h788 no?authuser=2 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程" title="javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程"></figure></div>



<p>Java Build Path 也是使用 jdk 1.7.0_45</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/ACtC-3f7rafyHQzMcgF3Od_mfpt9y8ZXQoDpnmU51K3zzzML-oZom0p3IkeC5ECLoWU2K2Ic6eiaECBVP6fpa9tjYLmGHAYXkWmkeorJi55ULGHsxLBafeg8IH3YRSZoxO6ncqvAmEyFi3upQFI_iKUEjC38OA=w831-h788-no?authuser=2" alt="ACtC 3f7rafyHQzMcgF3Od mfpt9y8ZXQoDpnmU51K3zzzML oZom0p3IkeC5ECLoWU2K2Ic6eiaECBVP6fpa9tjYLmGHAYXkWmkeorJi55ULGHsxLBafeg8IH3YRSZoxO6ncqvAmEyFi3upQFI iKUEjC38OA=w831 h788 no?authuser=2 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程" title="javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程"></figure></div>



<p>Run Configurations 的 JRE 設定也是選擇 jdk 1.7.0_45</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWHU1lL8wQEAIaIRR3gi-P47_XCOsGwV72aWXOkHX_G4e3NOgFI5uFLVBgmOxyOgp4pV36EiE-ZckUO9-AQHbp9ghuyxXFyljn1jn_kFzFQHUTiGMwtWgifDVcWhbB2DzsfTSsAvNpXZv5vCwjusEZrGA=w693-h296-no?authuser=2" alt="AM JKLWHU1lL8wQEAIaIRR3gi P47 XCOsGwV72aWXOkHX G4e3NOgFI5uFLVBgmOxyOgp4pV36EiE ZckUO9 AQHbp9ghuyxXFyljn1jn kFzFQHUTiGMwtWgifDVcWhbB2DzsfTSsAvNpXZv5vCwjusEZrGA=w693 h296 no?authuser=2 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程" title="javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程"></figure></div>



<p>執行下去就是這個錯誤 &#8230;</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/ACtC-3f9jG0XqkmNx4fEHhjEK90x9RWkI-C3TYAjN7SxSuC5BPHiIOODq3mSyGK5YMRRwZ6Txt3q9yNt0R75LCOpFalfA74bFUUKtHOQ0KBSJAQ8mBvdHHbvvN1uUBWgdjX12jEetzKb0TapfRn7TC0K39ZwDw=w1357-h400-no?authuser=2" alt="ACtC 3f9jG0XqkmNx4fEHhjEK90x9RWkI C3TYAjN7SxSuC5BPHiIOODq3mSyGK5YMRRwZ6Txt3q9yNt0R75LCOpFalfA74bFUUKtHOQ0KBSJAQ8mBvdHHbvvN1uUBWgdjX12jEetzKb0TapfRn7TC0K39ZwDw=w1357 h400 no?authuser=2 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程" title="javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程"></figure></div>



<p>如果手動安裝了 JRE 8，然後把 Run Configurations 的 JRE 設定成 JRE 8</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXwW-GbryLhs1UBdvpWDXYSb6Thx52bsxaVDbxndptJjpt_Vc2qrQ2zyx0ih1P6aSrZL2hNoUsH5P_ezZ7AAd5YR4x-yOITS2WcCkx-rT07BvWLix9BLbIOcs-v67eos6VLo3VsUxWOiwIlK3u6xkYi7Q=w686-h282-no?authuser=2" alt="AM JKLXwW GbryLhs1UBdvpWDXYSb6Thx52bsxaVDbxndptJjpt Vc2qrQ2zyx0ih1P6aSrZL2hNoUsH5P ezZ7AAd5YR4x yOITS2WcCkx rT07BvWLix9BLbIOcs v67eos6VLo3VsUxWOiwIlK3u6xkYi7Q=w686 h282 no?authuser=2 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程" title="javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程"></figure></div>



<p>就打完收工了 &#8230; 真的是太敢動 (嗚嗚嗚)，原本小蛙一直想要在 1.7 的環境下想辦法處理，試了一大堆方法沒有一個可以動的，因為改來改去改到亂七八糟，就連把環境升上 1.8 也都還是不行 &#8230; 後來發現 Eclipse 執行的時候可以選擇運行環境，就決定專案的 Compiler 跟 Build Path 維持 1.7，Run Configurations 改成 JRE 1.8 &#8230; 不想繼續糾結下去 Orz &#8230; 但有一些 JSP 環境下沒辦法這樣處理的還是很頭大啊 >&lt;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/8623/received-fatal-alert-handshake_failure/" data-wpel-link="internal">javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 抗戰歷程</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/8623/received-fatal-alert-handshake_failure/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</title>
		<link>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/</link>
					<comments>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 29 Nov 2019 05:34:06 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[2019]]></category>
		<category><![CDATA[xlsx]]></category>
		<category><![CDATA[Apache POI]]></category>
		<category><![CDATA[讀取 xlsx]]></category>
		<category><![CDATA[寫入 excel]]></category>
		<category><![CDATA[寫入 xls]]></category>
		<category><![CDATA[2020]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[jxl]]></category>
		<category><![CDATA[xls]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=6723</guid>

					<description><![CDATA[<p>之前寫過一篇 Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI，記錄用 POI 讀取 Excel 的教學，這篇要補足「寫入」的教學。 小蛙會切割成幾個步驟來講（還&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前寫過一篇 <a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a>，記錄用 POI 讀取 Excel 的教學，這篇要補足「寫入」的教學。</p>



<span id="more-6723"></span>



<p>小蛙會切割成幾個步驟來講（還沒有下載跟導入 POI 的話，請先看<a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">前一篇</a>）</p>



<ul class="my-li bg-darkblue wp-block-list"><li>開啟 Excel：<a href="#exist">讀入既有的</a>、<a href="#new">建立新的</a></li><li><a href="#data">設定儲存格資料</a></li><li><a href="#writeout">寫出 Excel</a></li></ul>



<p>小蛙最近要用到，之前都是這樣子寫，但是後來發現當要寫的資料大到一定程度的時候，這樣的寫法會出問題，所以最後面會加映<a href="#mass">寫出大量資料</a>時候的作法，不過其實也可以直接用最後面的那種做法就好了！</p>



<h2 class="para wp-block-heading" id="exist">開啟 Excel &#8211; 讀入既有的</h2>



<p>程式碼如下，直接看應該不難看懂，多寫 .xls 跟 .xlsx 的判斷，如果自己使用的狀況有固定，就不需要多做這一步驟，直接去建立 xls 對應的 <code>HSSFWorkbook</code> 或 xlsx 對應的 <code>XSSFWorkbook</code>。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 讀取既有的
String path = "要匯出的檔案 e.g. C:\\測試.xlsx";
Workbook wb = null;
String extString = path.substring(path.lastIndexOf("."));
InputStream is = new FileInputStream(path);
if(".xls".equals(extString)){
   wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(extString)){
   wb = new XSSFWorkbook(is);
}</pre>



<h2 class="para wp-block-heading" id="new">開啟 Excel &#8211; 建立新的</h2>



<p>如果本來沒有這個檔案就要用這段，先直接 new 出對應的 Workbook，在後面的步驟再把 Excel 寫出。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 開新檔案
String path = "要匯出的檔案 e.g. C:\\測試.xlsx";
Workbook wb = null;
String extString = path.substring(path.lastIndexOf("."));
if(".xls".equals(extString)){
    wb = new HSSFWorkbook();
}else if(".xlsx".equals(extString)){
    wb = new XSSFWorkbook();
}else{
    System.out.println("無效檔案");
    return;
}</pre>



<h2 class="para wp-block-heading" id="data">設定儲存格資料</h2>



<p>POI 對 Excel 的處理脈絡是這樣，先有一個 Workbook，把他看成是一個 Excel，下一層是頁籤 Sheet，再下一層是橫的 Row，最後就是儲存格 Cell，前面的步驟我們建立(取得)了 Workbook，下一步就是要建立 Sheet &gt; Row &gt; Cell，只要記住這個順序很快就可以把自己要寫的資料設定好了，下面的程式碼是把九九乘法表輸出到 Excel 裡。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 設定儲存格資料
Sheet sheet = wb.createSheet(); 
Row row = null;
Cell cell = null;
for(int r = 0; r &lt; 9; r++){
    row = sheet.createRow(r);
    for(int c = 0; c &lt; 9; c++){
        cell = row.createCell(c);
	cell.setCellValue(
            (c + 1) + " x " + (r + 1) + " = " + ((r + 1) * (c + 1))
        );
    }
}</pre>



<h2 class="writeout wp-block-heading">寫出 Excel</h2>



<p>內容都設置好之後，最後一個步驟就是把這些變動寫到 Excel 檔案上啦！</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 寫出 Excel
try {
    FileOutputStream fos = new FileOutputStream(new File(path));
    wb.write(fos);
    fos.flush();
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}</pre>



<p>到這邊就結束了！很簡單吧！上面全部組合起來應該就可以動了。</p>



<h2 class="para wp-block-heading" id="mass">處理大量資料</h2>



<p>如果資料量非常大的話，以小蛙的狀況來說要寫的資料量超過 3000 筆的時候，就會一直噴 <code>Exception in thread "main" java.lang.OutOfMemoryError: Java heap space</code> 的錯誤，Google 查了一些資料發現除了上面提到的 <code>HSSFWorkbook</code> 跟 <code>XSSFWorkbook</code> 之外，還有一個叫做 <code>SXSSFWorkbook</code> 的類別。</p>



<p><code>SXSSFWorkbook</code> 的運作方式跟 <code>HSSFWorkbook</code> 及 <code>XSSFWorkbook</code> 不同，<code>SXSSFWorkbook</code> 會先以「暫存檔」的方式寫回硬碟，最後輸出的時候再把他們存回 Excel 裡面，這樣一來就不會出現 Out Of Memory 的問題啦！不過如果內容處理沒弄好也還是會 OOM 就是～附上相關程式碼。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 大量資料用 SXSSFWorkbook
String path      = "要匯出的檔案 e.g. C:\\測試.xlsx";
// 設定幾筆之後，就先寫到硬碟的暫存檔
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sheet      = wb.createSheet();
FileOutputStream fileOut = new FileOutputStream(path);	
Row row   = null;
Cell cell = null;
for(int r = 0; r &lt; 9; r++){
    row = sheet.createRow(r);
    for(int c = 0; c &lt; 9; c++){
        cell = row.createCell(c);
        cell.setCellValue(
            (c + 1) + " x " + (r + 1) + " = " + ((r + 1) * (c + 1)));
    }
}
wb.write(fileOut);
fileOut.flush();
fileOut.close();
wb.dispose();</pre>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Excel 使用 POI 讀取文字格式日期卻變成數字的問題</title>
		<link>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/</link>
					<comments>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 06:09:29 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[Apache POI]]></category>
		<category><![CDATA[poi]]></category>
		<category><![CDATA[日期格式]]></category>
		<category><![CDATA[文字]]></category>
		<category><![CDATA[自訂]]></category>
		<category><![CDATA[日期轉文字]]></category>
		<category><![CDATA[excel]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=6550</guid>

					<description><![CDATA[<p>之前就有遇過類似的問題了，這次遇到的不太一樣，也用了很奇怪的處理方式，不知道正規怎麼處理，先記錄下來下次再遇到就知道怎麼處理了。 今天小蛙要用 POI 讀取的 Excel 遇到一個日期問題，以往要讀取&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前就有遇過類似的問題了，這次遇到的不太一樣，也用了很奇怪的處理方式，不知道正規怎麼處理，先記錄下來下次再遇到就知道怎麼處理了。</p>



<span id="more-6550"></span>



<p>今天小蛙要用 <a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">POI 讀取</a>的 Excel 遇到一個日期問題，以往要讀取的日期欄位格式大部份是固定的，如果是這種固定的狀況就可以直接用 TEXT 寫定或是讀取進來之後再做轉換，但這次要讀取的欄位裡有各式各樣的內容，因此沒辦法這樣處理。</p>



<h2 class="para wp-block-heading">問題</h2>



<p>如下圖，要讀取的儲存格為「1990-03-17」，但實際內容是上面的 1990/3/17，而格式是「自訂」，所以實際內容是 1990/3/17，指示設定顯示為 1990-03-17，透過 POI 讀出來之後會變成 32949 &#8230;</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/b0ITDAeqTe1lz8vFh02Fsa5ql3IG2mOn1a4IlIzeo96n2YIMuXtnL-IxSYlPhckAXB8IJzHl_eYeTkMoegQfwA24NPGhiN3_IVMIu57sJ-lvpzf49gLlvmU15-qP6ueiacx_2XWV6irSp9Qct90HrPPvEE2IWJKHNmppDEBWTNYAA4im-BSfox-fA8NNWIftFvT1FuIW0WJ9R9zWV6LhNqOneu-4J7JwJt6lKxoJhJ3VTbQDiA_TDFeWrTaRujWGKXEjxQ7XvWJgAs9K8Ts_HCiwGTpCtz2Xf94SPu9h4RYFwqPQOzrr8XEHIMam02394l9_J7WD-3BP7PNqnBr4rdmk7CO5bk6MH5zMyGCjDeGXdJEvt48trk3cutt5p1o8bLXuWpbQe7zNd5X0RfSSsQLik1BWBH3rznnvS94GiBWzkN56RVjz4Fz1BmFjqTYHnTcsUcukBJqsUUJPzTeMBsQXaR0WVUL1tTlnvheIRMedCXvUDRYVY-15DApGxzDfw8PSwDtLtDopJd6ZtGg4OsQnUxzltj1CDtUe7q0-HONSVP6WObeYuo_hATtWGrTecSr4IZTo3Exo2RsYHmkR2P0tDF_7eskunoGbcEeZOlkN0lbA4gM9wysLt13xlUUcSYvNZ8v36YEchajYrUktcsiVbEq32XusC5oGW7DgckbJwHZ7Sx42ghDZ9ImzfbwJHsoNGM5Idr8ygv07MuDjmk8Fa0qK9JSoLEtlf6g7cq5m74lP=w168-h120-no" alt="b0ITDAeqTe1lz8vFh02Fsa5ql3IG2mOn1a4IlIzeo96n2YIMuXtnL IxSYlPhckAXB8IJzHl eYeTkMoegQfwA24NPGhiN3 IVMIu57sJ lvpzf49gLlvmU15 qP6ueiacx 2XWV6irSp9Qct90HrPPvEE2IWJKHNmppDEBWTNYAA4im BSfox fA8NNWIftFvT1FuIW0WJ9R9zWV6LhNqOneu 4J7JwJt6lKxoJhJ3VTbQDiA TDFeWrTaRujWGKXEjxQ7XvWJgAs9K8Ts HCiwGTpCtz2Xf94SPu9h4RYFwqPQOzrr8XEHIMam02394l9 J7WD 3BP7PNqnBr4rdmk7CO5bk6MH5zMyGCjDeGXdJEvt48trk3cutt5p1o8bLXuWpbQe7zNd5X0RfSSsQLik1BWBH3rznnvS94GiBWzkN56RVjz4Fz1BmFjqTYHnTcsUcukBJqsUUJPzTeMBsQXaR0WVUL1tTlnvheIRMedCXvUDRYVY 15DApGxzDfw8PSwDtLtDopJd6ZtGg4OsQnUxzltj1CDtUe7q0 HONSVP6WObeYuo hATtWGrTecSr4IZTo3Exo2RsYHmkR2P0tDF 7eskunoGbcEeZOlkN0lbA4gM9wysLt13xlUUcSYvNZ8v36YEchajYrUktcsiVbEq32XusC5oGW7DgckbJwHZ7Sx42ghDZ9ImzfbwJHsoNGM5Idr8ygv07MuDjmk8Fa0qK9JSoLEtlf6g7cq5m74lP=w168 h120 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"></figure></div>



<p>如果把儲存格的格式直接設定成「文字」，然後儲存格就直接變成 32949 了 &#8230; </p>



<h2 class="para wp-block-heading">小蛙處理方式</h2>



<p>如果你的 excel 真的太大，幾百萬幾千萬筆那種，還是看有沒有大大願意幫忙，小蛙這次要處理的只有幾千筆。試過很多做法最後都會變成 32949，先說如果你的儲存格內容很一致，<a rel="noreferrer noopener nofollow external" aria-label="Converting Number representation of Date in excel to Date in java (在新分頁中開啟)" href="https://stackoverflow.com/questions/19028192/converting-number-representation-of-date-in-excel-to-date-in-java" target="_blank" data-wpel-link="external" class="wpel-icon-right">Converting Number representation of Date in excel to Date in java<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 或 <a href="https://www.extendoffice.com/zh-TW/documents/excel/2476-excel-convert-date-to-text-or-number.html" target="_blank" rel="noreferrer noopener nofollow external" aria-label="如何在Excel中將日期轉換為數字字符串或文本格式？  (在新分頁中開啟)" data-wpel-link="external" class="wpel-icon-right">如何在Excel中將日期轉換為數字字符串或文本格式？ <span class="wpel-icon wpel-image wpel-icon-6"></span></a>可能都可以幫上忙，只是看要從程式端處理還是從來源資料端處理。</p>



<p>因為內容不固定，用上面的方式轉出來又會延伸出其他問題，小蛙就想真正要做的事情其實是</p>



<pre class="left green">把所見的文字格式撈出來，而非實際資料
</pre>



<h3 class="para wp-block-heading">複製要處理的日期儲存格，貼上筆記本後再複製</h3>



<p>有時候複製了有格式的東西，要去除這些格式除了用「以純文字方式貼上」之外，還有一個方法就是，先貼去 Windows 內建的筆記本，一定要筆記本喔，有些文字編輯器即使你複製過去再複製出來，格式還是保留著的，Windows 內建最傳統的筆記本不支援格式，因此複製進去就會剩下純文字，再複製出來就只剩下純文字了。</p>



<h3 class="para wp-block-heading">將 excel 要貼上的儲存格設定為「文字」</h3>



<p>如果把上一部複製的資料貼回原本的 excel 儲存格中，還是會跟一開始一樣，要貼回之前先把儲存格設定成「文字」</p>



<h3 class="para wp-block-heading">貼上</h3>



<p>貼上之後再從 POI 讀取就可以讀到真正我們在 excel 中看到的內容了。</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/KFyzURE9MouVkIStM8gJQfC3QVXMlDP7h0t5NoGRMQ-kfqz1bhWfsCuWy-pRYwzF-FP9NeLRx8thinO_FhB9UrRXt0Q_opGixwnAokOk97oqOzl_DdtSwHAm_RgkqMo6W8vqELvPq4olCIQg_I7F0vkumOiSleImQzfYg4M9f1Im5d1Lza8tAcF5RVMFxoCloB3G76wLPL-p38eSnUnT-fnzHn-64k8Zv71FYYeKl5MjjVNpwComjuuF7k4m9o0jm56TywX4Hls_74nCNqu84o1TtLJ8yY8E-V3_VWKABFxNiX2r4N6aEhfc2mId4I3aOsmQsn5qQ-x-q54BIOnYLsvhya_0Sz1K8YpdNZGHySYfIDocAs9kwD50u9bsdxkNFIup-A_x_Pqz17OKiQZbSuH4RfcBkSadw-1vEXSIhdARYZkDI3RgxYCIigeO44GKrBkbAp9nrhfX8mLuDCaBv6rMEx_kHE70AHSiD851DcScsh0i0yy329E8MNNRSKSHQjZFxHJlqyV55eebW0LPwX_GG3WSWszsvNs2Zz3zXJvWAuu0lR58kaojxSDhnmA-2MKgimTessdIowOZqzUXlpw0AAweT_muKgFvlbsAh2IHR6jqrgW_JUulD-7mUoS8Lkv7UFVCI-usF14xrloOYL3zM2UQ2630yIVV4nAvHuEWhIS6tNiyj3K4YN8ANzgtboDsayIKLwwlHDxYW7Zqg0y1vJ0mIhrfB5jJh8J9-fqbQd7P=w557-h281-no" alt="KFyzURE9MouVkIStM8gJQfC3QVXMlDP7h0t5NoGRMQ kfqz1bhWfsCuWy pRYwzF FP9NeLRx8thinO FhB9UrRXt0Q opGixwnAokOk97oqOzl DdtSwHAm RgkqMo6W8vqELvPq4olCIQg I7F0vkumOiSleImQzfYg4M9f1Im5d1Lza8tAcF5RVMFxoCloB3G76wLPL p38eSnUnT fnzHn 64k8Zv71FYYeKl5MjjVNpwComjuuF7k4m9o0jm56TywX4Hls 74nCNqu84o1TtLJ8yY8E V3 VWKABFxNiX2r4N6aEhfc2mId4I3aOsmQsn5qQ x q54BIOnYLsvhya 0Sz1K8YpdNZGHySYfIDocAs9kwD50u9bsdxkNFIup A x Pqz17OKiQZbSuH4RfcBkSadw 1vEXSIhdARYZkDI3RgxYCIigeO44GKrBkbAp9nrhfX8mLuDCaBv6rMEx kHE70AHSiD851DcScsh0i0yy329E8MNNRSKSHQjZFxHJlqyV55eebW0LPwX GG3WSWszsvNs2Zz3zXJvWAuu0lR58kaojxSDhnmA 2MKgimTessdIowOZqzUXlpw0AAweT muKgFvlbsAh2IHR6jqrgW JUulD 7mUoS8Lkv7UFVCI usF14xrloOYL3zM2UQ2630yIVV4nAvHuEWhIS6tNiyj3K4YN8ANzgtboDsayIKLwwlHDxYW7Zqg0y1vJ0mIhrfB5jJh8J9 fqbQd7P=w557 h281 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"><figcaption>原本 excel 自動補成「自訂」</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/AJzrjXk1aETjwQgrLgByKaUgVnjmige5rbiafsD5i6rwvk9yuKNKPtdhcLQmU9T-DiKdlen4h4md0ZQh79jo_bVIgWvwkhhpHRTTPecOv5z3-IreTrI1lkRtxDU_v5gpzS6QdVe6H43FxKMWaV9Wk0lc4_lap6lURlyu_GRDUK58ZPOeX10He96HrrIphSsYKWnqAZC6hf11f-rdqkCj7sFxqzgJOi8DX6RbqaWmQf1L3JA_Xg8O-cDkJfAa-xQKo1M1XQmLlpajZfcMNYkSUOMqlfIun5InY0N3BxCQQJbbVMAsoU2iHUAhb2rqHYLLeC9MDGEuAEHHHVPXlL_AG4s2ibKfUZZfF5O5g9ZgL3LqViWZ-awp7XtQj1ebywviRwgG6EMPz1hBlNfY1xnnP-shswL90v2Vrn7TboV84W8-4w5NcdR_Tpc-sXlpNgM6XAEV5HZ0oS4C2lWAnpNZyTexOLG3K2YqGd6_t2nSfhd1eRD5Df4bXrCxh5AE08xZ0ptYSTeadQ9b6mgF1ERz6R4rWH2V9XY5-yT6l9plzdsAlwrogHjWeJBsHFwceM4lHZ6e409IyU0GIqUVHUPWT_b5jaolIwlv_QMhvbA0mNzpCx6BnEAEDgnCQfD2LQ9C-OHptVGvLB7HZ5J7LK6PdNWbEBFvZD76qtjfmfq08i2yfdSum02c3Fuhp0gWaGtl4NT-9QDyQe9RUI6utN4fPOdVijhOhG8yudP7XcbaKHz7lYGC=w560-h346-no" alt="AJzrjXk1aETjwQgrLgByKaUgVnjmige5rbiafsD5i6rwvk9yuKNKPtdhcLQmU9T DiKdlen4h4md0ZQh79jo bVIgWvwkhhpHRTTPecOv5z3 IreTrI1lkRtxDU v5gpzS6QdVe6H43FxKMWaV9Wk0lc4 lap6lURlyu GRDUK58ZPOeX10He96HrrIphSsYKWnqAZC6hf11f rdqkCj7sFxqzgJOi8DX6RbqaWmQf1L3JA Xg8O cDkJfAa xQKo1M1XQmLlpajZfcMNYkSUOMqlfIun5InY0N3BxCQQJbbVMAsoU2iHUAhb2rqHYLLeC9MDGEuAEHHHVPXlL AG4s2ibKfUZZfF5O5g9ZgL3LqViWZ awp7XtQj1ebywviRwgG6EMPz1hBlNfY1xnnP shswL90v2Vrn7TboV84W8 4w5NcdR Tpc sXlpNgM6XAEV5HZ0oS4C2lWAnpNZyTexOLG3K2YqGd6 t2nSfhd1eRD5Df4bXrCxh5AE08xZ0ptYSTeadQ9b6mgF1ERz6R4rWH2V9XY5 yT6l9plzdsAlwrogHjWeJBsHFwceM4lHZ6e409IyU0GIqUVHUPWT b5jaolIwlv QMhvbA0mNzpCx6BnEAEDgnCQfD2LQ9C OHptVGvLB7HZ5J7LK6PdNWbEBFvZD76qtjfmfq08i2yfdSum02c3Fuhp0gWaGtl4NT 9QDyQe9RUI6utN4fPOdVijhOhG8yudP7XcbaKHz7lYGC=w560 h346 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"><figcaption>處理完之後的，是「文字」而且沒有被轉成 32949</figcaption></figure></div>



<p>如果有更正規或更好的方法的大大，歡迎留言給小蛙，感恩！</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</title>
		<link>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/</link>
					<comments>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sun, 01 Sep 2019 14:08:37 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[讀取 xls]]></category>
		<category><![CDATA[讀取 xlsx]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[jxl]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[2019]]></category>
		<category><![CDATA[xlsx]]></category>
		<category><![CDATA[Apache POI]]></category>
		<category><![CDATA[讀取 excel]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=4300</guid>

					<description><![CDATA[<p>小蛙很久很久以前發過一篇 Java + Excel = JXL，主要講解怎麼用 Java 處理 Excel，當時使用的是 jxl 這個套件，不過這個套件有一個很大的問題，就是只能處理 xls 的檔案，&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙很久很久以前發過一篇 <a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a>，主要講解怎麼用 Java 處理 Excel，當時使用的是 jxl 這個套件，不過這個套件有一個很大的問題，就是只能處理 xls 的檔案，xlsx 沒有辦法處理，這篇要介紹的 Apache POI 則可以用來處理 xls 跟 xlsx。</p>



<span id="more-4300"></span>



<h2 class="para wp-block-heading">使用套件</h2>



<p>小蛙這邊說明自己下載 jar 的方式，首先到這邊下載 Apache POI，下載回來解壓縮之後，會得到一堆 jar，最簡單最簡單就是先把下面這些 jar 通通引入</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/WRuQRobKQHsBNDNGAu-ZQAPuFxdxMafOhWD24n5RRGr8Rleyevn7uBeNq_V0hiv2S7a_x0Ep3rLAzcTUoVK2aMzWHIpedbNVtCc_8n_X2Xn6fWAitA2vgpLLGF7Eagd9LQLFJ0mS13_3P8iCkWis6jZYUEwqmoUtlxOWTFpPhMlD84paCnn0MqdNaJOIvJETCySq9jHmK00L70TurnGhEXL1xBWXDJtgzaVWBpHqCaAW4CWmqs4C6rjfx409vYqrWrsbLNU5pJhZVk0_GyQJF1IG_JVeJ9nbV4GHX22fWY-2xRZngywqKBxpOl5be6uHnSAUMaYH0k3PSvPuMguKR86XaZS6E5r4AY5exf6TfhnTV3SMOgqfBJJpEdciSjPpUL8YbHmubVOJRRXjt7MSYDinLjjlwp953vNuW4s4zeDAzD4hqYw-IhJvniAfSTf2T2dqiEyFBXfFEE3BrlPBLeTFUsArgN2PEpTu30DZeBdLbEmzHVSJBn0INxd7B73Mmhhxa_IR3SSqKS-gM0zd_HsEWNwdrWSNF34yHJh0Yw9b89h_LqA-YBuUDGEfVqlvrFuDVu8-TqEOC8ANNKxllJSm0gJM8vEwQnhHRKdmL3GfI5L3LNClcJE7MkZmCCrNxk2ZmPWPV2pDdtBfRCg4WKsg-8HhEbkFbYtFUdQoislhgWDaphAIg5p9ewVldyfLh3rdpE0Yar9rHKbtIyBGcj6m3bT-hg3jz8_OzedgEyfRDimy=w401-h282-no" alt="WRuQRobKQHsBNDNGAu ZQAPuFxdxMafOhWD24n5RRGr8Rleyevn7uBeNq V0hiv2S7a x0Ep3rLAzcTUoVK2aMzWHIpedbNVtCc 8n X2Xn6fWAitA2vgpLLGF7Eagd9LQLFJ0mS13 3P8iCkWis6jZYUEwqmoUtlxOWTFpPhMlD84paCnn0MqdNaJOIvJETCySq9jHmK00L70TurnGhEXL1xBWXDJtgzaVWBpHqCaAW4CWmqs4C6rjfx409vYqrWrsbLNU5pJhZVk0 GyQJF1IG JVeJ9nbV4GHX22fWY 2xRZngywqKBxpOl5be6uHnSAUMaYH0k3PSvPuMguKR86XaZS6E5r4AY5exf6TfhnTV3SMOgqfBJJpEdciSjPpUL8YbHmubVOJRRXjt7MSYDinLjjlwp953vNuW4s4zeDAzD4hqYw IhJvniAfSTf2T2dqiEyFBXfFEE3BrlPBLeTFUsArgN2PEpTu30DZeBdLbEmzHVSJBn0INxd7B73Mmhhxa IR3SSqKS gM0zd HsEWNwdrWSNF34yHJh0Yw9b89h LqA YBuUDGEfVqlvrFuDVu8 TqEOC8ANNKxllJSm0gJM8vEwQnhHRKdmL3GfI5L3LNClcJE7MkZmCCrNxk2ZmPWPV2pDdtBfRCg4WKsg 8HhEbkFbYtFUdQoislhgWDaphAIg5p9ewVldyfLh3rdpE0Yar9rHKbtIyBGcj6m3bT hg3jz8 OzedgEyfRDimy=w401 h282 no Java 讀取 Excel 文件(xls, xlsx) - 使用 Apache POI" title="Java 讀取 Excel 文件(xls, xlsx) - 使用 Apache POI"></figure></div>



<p>通通引入之後，小蛙放上參考網路上資料後，改成自己適用的功能片段，主要作法是先讀取 Excel 裡的所有資料丟到 List&lt;List&lt;String&gt;&gt; 裡面，再透過操作 List&lt;List&lt;String&gt;&gt; 的資料達到目的，當然也可以改成最直觀的方式，直接讀取特定欄位直接做處理。（不一定要用這種全部讀出來再去處理的方式，也可以直接一格一格讀出來處理），下面只是列出一些 function，把它改成自己需要的方式就可以了。</p>



<p>操作流程大概是這樣 </p>



<ul class="wp-block-list"><li><a href="#read">讀取 xls / xlsx 檔案</a></li><li><a href="#sheet">讀取 sheet</a></li><li><a href="#rowcol">遍尋 rows（橫的）遍尋 columns（直的）</a></li><li><a href="#conv">讀取儲存格資料並根據類型做轉換</a></li></ul>



<h3 class="para wp-block-heading" id="read">讀取 xls / xlsx 檔案</h3>



<p>第一步就是讀取 excel 檔案，這邊多做了一件事情就是區分出 xls 跟 xlsx，用一個 if 判斷是分別 new 出 HSSFWorkbook / XSSFWorkbook 物件。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 從路徑中讀取 Excel
default Workbook getWorkbook(String path) throws FileNotFoundException, IOException {
	Workbook wb = null;
	if(path == null) return null;
	String extString = path.substring(path.lastIndexOf("."));
	InputStream is = new FileInputStream(path);
	if(XLS.equals(extString)){
	    wb = new HSSFWorkbook(is);
	}else if(XLSX.equals(extString)){
	    wb = new XSSFWorkbook(is);
	}
	return wb;
}</pre>



<h3 class="para wp-block-heading" id="sheet">讀取 sheet</h3>



<p>從上面取得的 workbook 中，讀取特定頁籤，這個 sheetNo 從 0 開始計算，也就是說第一個頁籤的話要傳入 0，第二個頁籤傳入 1，以此類推。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 讀取要用的 Sheet
default Sheet getSheet(Workbook workbook, int sheetNo){
	return workbook.getSheetAt(sheetNo);
}</pre>



<h3 class="para wp-block-heading" id="rowcol">遍尋 rows（橫的）遍尋 columns（直的）</h3>



<p>這邊跟 jxl 比較不同的地方在於，必須先把 row 取出來，然後取得最後一個 row 跟最後一個 column，要注意的是取得 colnum 的時候，要先判斷取出的 row 是不是 null，不然會噴錯喔！（小蛙這邊懶得改了，自己要記得加上判斷喔），以及 index 都是從 0 開始計算，然後每一格儲存格取出的資料都放在 List&lt;List&lt;String&gt;&gt;。中間 readCell 部份內容請往下看。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 把所有欄位讀出成 List&lt;List&lt;String&gt;&gt;
default List&lt;List&lt;String&gt;&gt; readFields(Workbook workbook, int sheetNo, int firstRow, int firstCol) throws Exception {
	Sheet sheet = workbook.getSheetAt(sheetNo);
	Row row = sheet.getRow(0); 
	int rownum = sheet.getPhysicalNumberOfRows();
	int colnum = row.getPhysicalNumberOfCells();
	List&lt;List&lt;String&gt;&gt; list = new ArrayList&lt;&gt;();
	List&lt;String&gt; _inner;
	for(int i = firstRow; i &lt; rownum; i++){
		row = sheet.getRow(i);
		 _inner = new ArrayList&lt;&gt;();
		if(row != null){
			for(int j = firstCol; j &lt; colnum; j++){
				_inner.add(readCell(row.getCell(j)));
			}
			list.add(_inner);
		}else{
			break;
		}
	}
	return list;
}</pre>



<h3 class="para wp-block-heading" id="conv">轉換型態</h3>



<p>跟 jxl 不一樣的部份是，jxl 可以直接取得字串型態的資料，但是 poi 必須根據不同的形態來呼叫不同的方法取得內容，下面是參考網路上看到的程式碼做的修改，原始來源不太記得了，大致上符合小蛙的需求，可以直接複製回去，再依自己的需求修改。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 小蛙自己要吐出的格式
default String readCell(Cell cell){
	return (String) getCellFormatValue(cell);
}
default Object getCellFormatValue(Cell cell){
	Object cellValue = null;
        if(cell!=null){
            switch(cell.getCellType()){
	            case NUMERIC:
	            	cellValue 	= df.format(cell.getNumericCellValue());  
	                break;
	            case FORMULA:
	                if(DateUtil.isCellDateFormatted(cell)){
	                    cellValue = cell.getDateCellValue();
	                }else{
	                    cellValue = String.valueOf(cell.getNumericCellValue());
	                }
	                break;
	            case STRING:
	                cellValue = cell.getRichStringCellValue().getString();
	                break;
	            default:
	                cellValue = "";
            }
	    }else{
            cellValue = "";
        }
	return cellValue;
}</pre>



<p>打完收工，把這些 code 改成自己需求之後組合起來應該就可以順利動囉！</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Eclipse 開啟 class 檔案</title>
		<link>https://noter.tw/4467/eclipse-%e9%96%8b%e5%95%9f-class-%e6%aa%94%e6%a1%88/</link>
					<comments>https://noter.tw/4467/eclipse-%e9%96%8b%e5%95%9f-class-%e6%aa%94%e6%a1%88/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sat, 23 Feb 2019 05:15:02 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[decompiler]]></category>
		<category><![CDATA[jd]]></category>
		<category><![CDATA[反解譯]]></category>
		<category><![CDATA[2019]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=4467</guid>

					<description><![CDATA[<p>有時候拿到一些 jar 或是 class 卻沒有辦法看到內容，用強制打開也只會看到一堆亂碼，這邊記錄一下怎麼透過 Eclipse 開啟 class 檔案。 很簡單就可以做到這件事，不過看起來好像不能修&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4467/eclipse-%e9%96%8b%e5%95%9f-class-%e6%aa%94%e6%a1%88/" data-wpel-link="internal">Eclipse 開啟 class 檔案</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>有時候拿到一些 jar 或是 class 卻沒有辦法看到內容，用強制打開也只會看到一堆亂碼，這邊記錄一下怎麼透過 Eclipse 開啟 class 檔案。</p>



<span id="more-4467"></span>



<p>很簡單就可以做到這件事，不過看起來好像不能修改(不確定)，直接開始吧！</p>



<p>首先到 <a href="http://jd.benow.ca/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Java Decompiler 官網<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，找到 JD-Eclipse 且換到 Download 下載 jd-eclipse-site-1.0.0-RC2.zip<br></p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/pHxJskapRYkDMCLgNJ7L6iqJLu4gB8BfAJYD0iVgsG0v8kQuRlAr01XT7hz2vdQk4ZHbvdXFcMBarLZwOgQY-85dY6fHUrAtonZ6p7x38PlN3W-j6nGMJSmFFl77wnbJ3tbaucYK1yBFvGoLX-Q8WKOMNj6nD_mSXhCLB-4iz2LTq7nyAEldgVm1mrsdS_HC38kQFGpmaDaWTuBPms7mjt1Kbyn5CKaHriv7RrWrI2cGwv_axjXWU63weCgZisR9mMiRIFjL82l4ntXuPUQ5rRhI8ufe9M-p44BaJFDT_VaIm_1St8EECvO6xgOAb-6uDqcGVU0ofKpk55b7-uKTdQxk3p9in6mF6zFF4okKru4Ty896_y3xs026vkuzi1itpjU0l7wGZgW5GsjjnYPFc1jIpfx26QDyuVKSPxdijPiCL0iwmok9j6MYmxxmJLj6yNAYv-2mowJ0lRQOgHAzcPZn_4g4V5l-HZ-Z41ce1hCwz0kiSF57ZejpKHTtuCtYbooxoythRseh4NS86ZJUbt8so-0Q8zdvosnFIgUSKuFiX0zg4uL8sefcDY-Prv-lfjPrkE4Zcc7AQoqpSzw6TJgqrKu-ZKsInxL9Ex0qeH4LLPISoeDXOzGJIegzSPgkmJRtRuyV8ujozJoTgB-RrhUxDzk8f52X=w713-h708-no" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/pHxJskapRYkDMCLgNJ7L6iqJLu4gB8BfAJYD0iVgsG0v8kQuRlAr01XT7hz2vdQk4ZHbvdXFcMBarLZwOgQY-85dY6fHUrAtonZ6p7x38PlN3W-j6nGMJSmFFl77wnbJ3tbaucYK1yBFvGoLX-Q8WKOMNj6nD_mSXhCLB-4iz2LTq7nyAEldgVm1mrsdS_HC38kQFGpmaDaWTuBPms7mjt1Kbyn5CKaHriv7RrWrI2cGwv_axjXWU63weCgZisR9mMiRIFjL82l4ntXuPUQ5rRhI8ufe9M-p44BaJFDT_VaIm_1St8EECvO6xgOAb-6uDqcGVU0ofKpk55b7-uKTdQxk3p9in6mF6zFF4okKru4Ty896_y3xs026vkuzi1itpjU0l7wGZgW5GsjjnYPFc1jIpfx26QDyuVKSPxdijPiCL0iwmok9j6MYmxxmJLj6yNAYv-2mowJ0lRQOgHAzcPZn_4g4V5l-HZ-Z41ce1hCwz0kiSF57ZejpKHTtuCtYbooxoythRseh4NS86ZJUbt8so-0Q8zdvosnFIgUSKuFiX0zg4uL8sefcDY-Prv-lfjPrkE4Zcc7AQoqpSzw6TJgqrKu-ZKsInxL9Ex0qeH4LLPISoeDXOzGJIegzSPgkmJRtRuyV8ujozJoTgB-RrhUxDzk8f52X=w713-h708-no" alt="pHxJskapRYkDMCLgNJ7L6iqJLu4gB8BfAJYD0iVgsG0v8kQuRlAr01XT7hz2vdQk4ZHbvdXFcMBarLZwOgQY 85dY6fHUrAtonZ6p7x38PlN3W j6nGMJSmFFl77wnbJ3tbaucYK1yBFvGoLX Q8WKOMNj6nD mSXhCLB 4iz2LTq7nyAEldgVm1mrsdS HC38kQFGpmaDaWTuBPms7mjt1Kbyn5CKaHriv7RrWrI2cGwv axjXWU63weCgZisR9mMiRIFjL82l4ntXuPUQ5rRhI8ufe9M p44BaJFDT VaIm 1St8EECvO6xgOAb 6uDqcGVU0ofKpk55b7 uKTdQxk3p9in6mF6zFF4okKru4Ty896 y3xs026vkuzi1itpjU0l7wGZgW5GsjjnYPFc1jIpfx26QDyuVKSPxdijPiCL0iwmok9j6MYmxxmJLj6yNAYv 2mowJ0lRQOgHAzcPZn 4g4V5l HZ Z41ce1hCwz0kiSF57ZejpKHTtuCtYbooxoythRseh4NS86ZJUbt8so 0Q8zdvosnFIgUSKuFiX0zg4uL8sefcDY Prv lfjPrkE4Zcc7AQoqpSzw6TJgqrKu ZKsInxL9Ex0qeH4LLPISoeDXOzGJIegzSPgkmJRtRuyV8ujozJoTgB RrhUxDzk8f52X=w713 h708 no Eclipse 開啟 class 檔案" title="Eclipse 開啟 class 檔案"></a></figure></div>



<p>下方有安裝流程：</p>



<ol class="my-li bg-darkblue wp-block-list"><li>下載 jd-eclipse-site-1.0.0-RC2.zip，並解壓縮到一個地方放</li><li>開啟 Eclipse</li><li>「Help &gt; Install New Software &#8230; 」</li><li>點選 Add&#8230; 加入新的 repository</li><li>輸入 &#8220;JD-Eclipse Update Site&#8221;，名字可以打自己記得住的就好</li><li>選取 &#8220;Java Decompiler Eclipse Plug-in&#8221;</li><li>一直下一步，到結束後重啟 Eclipse</li></ol>



<p>看起來很像步驟很多，其實一下子就弄好了，接下來要設定跟 Eclipse 的關聯，讓開啟 class 檔的時候，可以自動套用 Java Decompiler。</p>



<p>開啟 Eclipse -&gt; Window -&gt; Preferences</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/iJm1LkCytcM05-l724M6yZN58HOZte1O-0Hrcsq0W-AR2C2d839Ri69AlEqTZPJi6W5K0XdTXfTDF65PNiv1Msr3dLSm8lAeE7Bqwyu42GymsvPokSN5Xkuq0evJBfjYM9mBVRD4x8RIVftSzh9z1M-B8EYHFE_s_6lZstD_FBPKp-jPgl_7lgWqtUI4wGEWdWeevuxnp9cquaY2uGoN82WWFGrv0O8Y6_F_wfP5dc0WWf8L7mlhhOmisQWZ-UIW7Yx3KCIldI_0OtW9hKHrkOR0MHRzkA_DzCbLXWKJJ9yO76QVRAvEuzOSFgwjBzfrsmJpXXQVXwOaUdZRZdvJRGop6ge9MLV2IOVyfvBVd2doP6Jy5mNtyvyKVZj8214w4pAOxouH29jbD2LBUtP0z1oSuNh0YLwwMjUntfMn3zQrSkG0nNcMF4W4ipWbRg--tvC6L0boeeiQCSRhIq4O98AYShMAYLWe0KG7meiSE0CowGB_wH3ZkqDF5BmTjevVOWmTkrf4u4lA-jw3ajBnnr1Ygps0QRhL-gq5NVfBE4sV7LAVlLGU0XEc5F1hMbwrob4_nAyk7ymTO9R6TELEqwp-eLQcsi7kWC40HOcZRHGk4EKYJQs-WeldFnxrn5PcNK8mk5DTiBx3OyLddsAbR8tqr-UUPDZX=w323-h287-no" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/iJm1LkCytcM05-l724M6yZN58HOZte1O-0Hrcsq0W-AR2C2d839Ri69AlEqTZPJi6W5K0XdTXfTDF65PNiv1Msr3dLSm8lAeE7Bqwyu42GymsvPokSN5Xkuq0evJBfjYM9mBVRD4x8RIVftSzh9z1M-B8EYHFE_s_6lZstD_FBPKp-jPgl_7lgWqtUI4wGEWdWeevuxnp9cquaY2uGoN82WWFGrv0O8Y6_F_wfP5dc0WWf8L7mlhhOmisQWZ-UIW7Yx3KCIldI_0OtW9hKHrkOR0MHRzkA_DzCbLXWKJJ9yO76QVRAvEuzOSFgwjBzfrsmJpXXQVXwOaUdZRZdvJRGop6ge9MLV2IOVyfvBVd2doP6Jy5mNtyvyKVZj8214w4pAOxouH29jbD2LBUtP0z1oSuNh0YLwwMjUntfMn3zQrSkG0nNcMF4W4ipWbRg--tvC6L0boeeiQCSRhIq4O98AYShMAYLWe0KG7meiSE0CowGB_wH3ZkqDF5BmTjevVOWmTkrf4u4lA-jw3ajBnnr1Ygps0QRhL-gq5NVfBE4sV7LAVlLGU0XEc5F1hMbwrob4_nAyk7ymTO9R6TELEqwp-eLQcsi7kWC40HOcZRHGk4EKYJQs-WeldFnxrn5PcNK8mk5DTiBx3OyLddsAbR8tqr-UUPDZX=w323-h287-no" alt="iJm1LkCytcM05 l724M6yZN58HOZte1O 0Hrcsq0W AR2C2d839Ri69AlEqTZPJi6W5K0XdTXfTDF65PNiv1Msr3dLSm8lAeE7Bqwyu42GymsvPokSN5Xkuq0evJBfjYM9mBVRD4x8RIVftSzh9z1M B8EYHFE s 6lZstD FBPKp jPgl 7lgWqtUI4wGEWdWeevuxnp9cquaY2uGoN82WWFGrv0O8Y6 F wfP5dc0WWf8L7mlhhOmisQWZ UIW7Yx3KCIldI 0OtW9hKHrkOR0MHRzkA DzCbLXWKJJ9yO76QVRAvEuzOSFgwjBzfrsmJpXXQVXwOaUdZRZdvJRGop6ge9MLV2IOVyfvBVd2doP6Jy5mNtyvyKVZj8214w4pAOxouH29jbD2LBUtP0z1oSuNh0YLwwMjUntfMn3zQrSkG0nNcMF4W4ipWbRg tvC6L0boeeiQCSRhIq4O98AYShMAYLWe0KG7meiSE0CowGB wH3ZkqDF5BmTjevVOWmTkrf4u4lA jw3ajBnnr1Ygps0QRhL gq5NVfBE4sV7LAVlLGU0XEc5F1hMbwrob4 nAyk7ymTO9R6TELEqwp eLQcsi7kWC40HOcZRHGk4EKYJQs WeldFnxrn5PcNK8mk5DTiBx3OyLddsAbR8tqr UUPDZX=w323 h287 no Eclipse 開啟 class 檔案" title="Eclipse 開啟 class 檔案"></a></figure></div>



<p>General -&gt; Editors -&gt; File Associations -&gt; 找到 *.class，下方把 &#8220;JD Class File Viewer&#8221; 設定成 Default，下次只要雙擊 class 檔案，就會自動使用 Java Decompiler 插件開啟了。</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/6RlfH50YvjDvO_20UxwJ1cQVm-e23FUafQqISmvqvfhO9H5cUT2-dhLoOv6MftpnsLghZB8um-8ZUwG2VPr-OM4I_xUMTp9k-ObmNX1FN-bltw6deqw-B9sR5O0cYtydZsraa0dOet8hn4BuaKlkvxTI9vJjGx3WTHXpaQ_cqEq_tYwopg1IqNG4ixeGNupyjE-LydBQJaKnFILlC9zW6ADOMq1eGa-aZbAPsGBgu4Wwz_2TaBx_HlDeZ3J9U4psNZwWuHC1hGLD8WfwDZNI5d1F7Ea6ssDXA8cbsi2FlNpuLqS--m09FEWDKVvBXqTTJDOVi1iDvTd4fHKlix56bZpdS6PAyM7m9mGvYZoBA7CJoHdokvNUFK0ncXonj9TUarGVlXXOpsXJRPBQVgOf22xf_q0Ph_lG-JnVmw-l6Z1l3x-6O5dOh_NclKoOfmNimoJJQ3yqqT6nswaESA0QORhtV90hnTlxdTQmJKRAeDRGq_3cL6o4RiebcPwt_HZmQNcLHEwr9t6ZtWCsujkCyhy8zBHCT3K-bHZfxeMpulk04JrsE0QVab0BLPlWOz2eE3Jc41fkIlip_lJPVF-iskQzoRA1xwMLBVkfjyIMap4fYKR3hgY4d-Vzi7-UsTbiYeRyCCXTRJtzdCw_BAQxRdveoHui8Ro7=w868-h866-no" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/6RlfH50YvjDvO_20UxwJ1cQVm-e23FUafQqISmvqvfhO9H5cUT2-dhLoOv6MftpnsLghZB8um-8ZUwG2VPr-OM4I_xUMTp9k-ObmNX1FN-bltw6deqw-B9sR5O0cYtydZsraa0dOet8hn4BuaKlkvxTI9vJjGx3WTHXpaQ_cqEq_tYwopg1IqNG4ixeGNupyjE-LydBQJaKnFILlC9zW6ADOMq1eGa-aZbAPsGBgu4Wwz_2TaBx_HlDeZ3J9U4psNZwWuHC1hGLD8WfwDZNI5d1F7Ea6ssDXA8cbsi2FlNpuLqS--m09FEWDKVvBXqTTJDOVi1iDvTd4fHKlix56bZpdS6PAyM7m9mGvYZoBA7CJoHdokvNUFK0ncXonj9TUarGVlXXOpsXJRPBQVgOf22xf_q0Ph_lG-JnVmw-l6Z1l3x-6O5dOh_NclKoOfmNimoJJQ3yqqT6nswaESA0QORhtV90hnTlxdTQmJKRAeDRGq_3cL6o4RiebcPwt_HZmQNcLHEwr9t6ZtWCsujkCyhy8zBHCT3K-bHZfxeMpulk04JrsE0QVab0BLPlWOz2eE3Jc41fkIlip_lJPVF-iskQzoRA1xwMLBVkfjyIMap4fYKR3hgY4d-Vzi7-UsTbiYeRyCCXTRJtzdCw_BAQxRdveoHui8Ro7=w868-h866-no" alt="6RlfH50YvjDvO 20UxwJ1cQVm e23FUafQqISmvqvfhO9H5cUT2 dhLoOv6MftpnsLghZB8um 8ZUwG2VPr OM4I xUMTp9k ObmNX1FN bltw6deqw B9sR5O0cYtydZsraa0dOet8hn4BuaKlkvxTI9vJjGx3WTHXpaQ cqEq tYwopg1IqNG4ixeGNupyjE LydBQJaKnFILlC9zW6ADOMq1eGa aZbAPsGBgu4Wwz 2TaBx HlDeZ3J9U4psNZwWuHC1hGLD8WfwDZNI5d1F7Ea6ssDXA8cbsi2FlNpuLqS m09FEWDKVvBXqTTJDOVi1iDvTd4fHKlix56bZpdS6PAyM7m9mGvYZoBA7CJoHdokvNUFK0ncXonj9TUarGVlXXOpsXJRPBQVgOf22xf q0Ph lG JnVmw l6Z1l3x 6O5dOh NclKoOfmNimoJJQ3yqqT6nswaESA0QORhtV90hnTlxdTQmJKRAeDRGq 3cL6o4RiebcPwt HZmQNcLHEwr9t6ZtWCsujkCyhy8zBHCT3K bHZfxeMpulk04JrsE0QVab0BLPlWOz2eE3Jc41fkIlip lJPVF iskQzoRA1xwMLBVkfjyIMap4fYKR3hgY4d Vzi7 UsTbiYeRyCCXTRJtzdCw BAQxRdveoHui8Ro7=w868 h866 no Eclipse 開啟 class 檔案" title="Eclipse 開啟 class 檔案"></a></figure></div>



<p></p>



<p></p>



<p></p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4467/eclipse-%e9%96%8b%e5%95%9f-class-%e6%aa%94%e6%a1%88/" data-wpel-link="internal">Eclipse 開啟 class 檔案</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/4467/eclipse-%e9%96%8b%e5%95%9f-class-%e6%aa%94%e6%a1%88/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>將專案匯出 / 匯入 WAR 檔</title>
		<link>https://noter.tw/3117/%e5%b0%87%e5%b0%88%e6%a1%88%e5%8c%af%e5%87%ba%e5%8c%af%e5%85%a5-war-%e6%aa%94/</link>
					<comments>https://noter.tw/3117/%e5%b0%87%e5%b0%88%e6%a1%88%e5%8c%af%e5%87%ba%e5%8c%af%e5%85%a5-war-%e6%aa%94/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 18 Oct 2013 10:00:38 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[WAR]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Struts]]></category>
		<category><![CDATA[export]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3117</guid>

					<description><![CDATA[<p>在 Struts2 設置筆記 (Hello World 級^^) 中提到 Struts2 的設置環境，但是如果每次要開發一個 Struts 2 專案就要做一次這些事情有點麻煩，如果只是要空白的 WAR&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3117/%e5%b0%87%e5%b0%88%e6%a1%88%e5%8c%af%e5%87%ba%e5%8c%af%e5%85%a5-war-%e6%aa%94/" data-wpel-link="internal">將專案匯出 / 匯入 WAR 檔</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>在 <a href="https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Struts2 設置筆記 (Hello World 級^^)</a> 中提到 Struts2 的設置環境，但是如果每次要開發一個 Struts 2 專案就要做一次這些事情有點麻煩，如果只是要空白的 WAR，Struts2 下載下來裡面就已經有了，這邊小蛙記錄把一個基礎建置好的 Struts 2 專案(包含已經加入了常用的設定、套件、架構 &#8230; 等) 匯出成 WAR。<br />
<span id="more-3117"></span>要把專案匯出成 WAR 非常簡單，只要在要匯出的專案上</p>
<pre>點選滑鼠右鍵
-&gt; Export
-&gt; Export ...
-&gt; Web
-&gt; WAR file
-&gt; Web project: (選取要匯出的專案)
-&gt; Destination: (選擇要存的檔案及路徑)
-&gt; Optimize for a specific server runtime: (選擇自己用的 Server 也可以不選)
-&gt; Export source file (是否要包含程式碼)
-&gt; Override existing file (覆蓋既有檔案)
-&gt; Finish</pre>
<p>小蛙一開始沒有勾選 Export source file，造成把 WAR 專案解回來的時候發現裡面只有一堆 class 跟 jar，完全沒有半點原始檔 &#8230; 再包一次記得要把這個打勾，如果是要把專案佈署到 tomcat 上的話，就可以不用勾選這個選項。<br />
接著是匯入的步驟，在 Eclipse 上</p>
<pre>點選滑鼠右鍵
-&gt; Import
-&gt; Import ...
-&gt; Web
-&gt; WAR file
-&gt; WAR file: (選擇剛剛匯出的檔案)
-&gt; Web Project: (要匯入專案的名字)
-&gt; Target runtime: (Server 環境，可不設定) 
-&gt; Next
-&gt; WAR Import: (如果 WAR 專案裡面的只有用到別人的 library，這裡不要勾選)
-&gt; Finish</pre>
<p>上面的 WAR Import 小蛙第一次不太瞭解意思就勾選了，結果 Eclipse 中就多了一堆專案，Eclipse 把所有用到的 JAR，例如：ojdbc14.jar 也匯入成一個 ojdbc 專案。<br />
這邊還有一個地方要修改，小蛙也不知道為什麼匯回去的專案路徑跟原始匯出時的不同，從</p>
<pre>Project
-&gt; Properties
-&gt; Java Build Path
-&gt; Source
-&gt; Default output folder: MyProject/WebContent/WEB-INF/classes</pre>
<p>從 WAR 匯回的專案卻變成系統預設</p>
<pre>Default output folder: MyNewProject/build/classes</pre>
<p>這邊要把新專案設定回原本的路徑，否則可能會造成一些找不到 class 或是路徑錯誤的問題！</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3117/%e5%b0%87%e5%b0%88%e6%a1%88%e5%8c%af%e5%87%ba%e5%8c%af%e5%85%a5-war-%e6%aa%94/" data-wpel-link="internal">將專案匯出 / 匯入 WAR 檔</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3117/%e5%b0%87%e5%b0%88%e6%a1%88%e5%8c%af%e5%87%ba%e5%8c%af%e5%85%a5-war-%e6%aa%94/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Java 連結 MySQL</title>
		<link>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/</link>
					<comments>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 15:17:32 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[connector]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2883</guid>

					<description><![CDATA[<p>在寫程式需要連結到資料庫的時候，程式中必須要先有 Connector 及 Driver，MySQL 叫做 Connector/J，Oracle 則叫做 OJDBC。這篇文章是從舊部落格轉發過來，純粹當&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>在寫程式需要連結到資料庫的時候，程式中必須要先有 Connector 及 Driver，MySQL 叫做 Connector/J，Oracle 則叫做 OJDBC。這篇文章是從舊部落格轉發過來，純粹當做文件記錄。<br>
<span id="more-2883"></span><br>
1. 到<a href="http://dev.mysql.com/downloads/connector/j/5.0.html" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://dev.mysql.com/downloads/connector/j/5.0.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a>下載connector。 (看是用哪一版本自行更換)<br>
2. 解壓縮後，將 mysql-connector-java-5.0.4-bin.jar 複製到 jre 安裝目錄下的 \lib\ext<br>
例如：C:\Program Files\Java\jre1.5.0_09\lib\ext<br>
<span style="color: #ff0000;"><span style="color: #000000;">3.&nbsp;</span><strong>set classpath=.;C:\Program Files\Java\jre1.5.0_09\lib\ext\mysql-connector-java-5.0.4-bin.jar&nbsp;</strong><span style="color: #000000;">(這一步應該是不需要，只要在 IDE 中把 jar import 進專案就可以了，例如：eclipse 裡面設定 Java Build Path)</span></span><br>
4. 程式碼部分
</p>
<pre class="brush: java; gutter: true">String jdbc = "com.mysql.jdbc.Driver";               // 使用的 Driver
String url = "jdbc:mysql://localhost/資料庫名稱";     // 連結URL
String user = "帳號";
String pass = "密碼";
Class.forName(jdbc);
Connection con = DriverManager.getConnection(url,user,pass);</pre>
<p><span style="color: #ff00ff;">有件事要注意：電腦中同時有 jdk 及 jre，set classpath 及 connector 複製的路徑，當時設定 jdk 中的 jre 路徑， 仍沒辦法使用，改成 jre 才可使用。</span></p>


<p><strong>MySQL / MariaDB / Oracle 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list">
<li><a href="https://noter.tw/12503/mariadb-json_extract-%e5%be%9e-json-%e6%ac%84%e4%bd%8d%e5%8f%96%e5%80%bc/" data-wpel-link="internal">MariaDB JSON_EXTRACT: 從 JSON 欄位取值</a></li>



<li><a href="https://noter.tw/12015/oracle-%e5%88%86%e7%b5%84%e7%b7%a8%e8%99%9f%e8%88%87%e5%85%a8%e6%8e%92%e5%ba%8f%e7%b7%a8%e8%99%9f-row_number-over-partition-by/" data-wpel-link="internal">Oracle, MySQL 分組編號與全排序編號 row_number, over, partition by</a></li>



<li><a href="https://noter.tw/3929/mysql-error-2003-hy000-%E7%84%A1%E6%B3%95%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A/" data-wpel-link="internal">MySQL ERROR 2003 (HY000) 無法遠端連線</a></li>



<li><a href="https://noter.tw/2889/jsp-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a></li>



<li><a href="https://noter.tw/2883/java-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a></li>



<li><a href="https://noter.tw/2306/mysql%E6%8E%92%E7%A8%8Bevent-scheduler/" data-wpel-link="internal">MySQL 排程(Event Scheduler)</a></li>



<li><a href="https://noter.tw/1988/java%E9%80%A3%E7%B5%90%E9%81%A0%E7%AB%AFmysql/" data-wpel-link="internal">Java 連結遠端 MySQL</a></li>



<li><a href="https://noter.tw/4508/mariadb-replication-%E8%A8%AD%E5%AE%9A/" data-wpel-link="internal">MariaDB Replication 設定</a></li>



<li><a href="https://noter.tw/122/java-php-%E6%8F%92%E5%85%A5-emoji-%E8%B3%87%E6%96%99%E5%88%B0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a></li>
</ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>java.io.IOException: The character &#039; &#039; is an invalid XML character</title>
		<link>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/</link>
					<comments>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sun, 19 May 2013 06:27:21 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java.io.IOException]]></category>
		<category><![CDATA[The character ' ' is an invalid XML character]]></category>
		<category><![CDATA[Xerces]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLChar]]></category>
		<category><![CDATA[特殊字元]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2864</guid>

					<description><![CDATA[<p>小蛙的工作常常需要做一些資料庫匯出成 XML 格式，以 XML 達到交換資料的目的，上星期匯出的時候發現 java.io.IOException: The character &#8216; &#82&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/" data-wpel-link="internal">java.io.IOException: The character &#039; &#039; is an invalid XML character</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>小蛙的工作常常需要做一些資料庫匯出成 XML 格式，以 XML 達到交換資料的目的，上星期匯出的時候發現<span style="color: #ff0000;"><strong> java.io.IOException: The character &#8216; &#8216; is an invalid XML character</strong></span> 這個 Exception，發生錯誤的檔案因為這個特殊字元導致 XML 匯出不完整，上網查了一些解決辦法記錄在這篇文章中。<br />
<span id="more-2864"></span><br />
一開始發生這個例外的時候，並沒有發現匯出的 XML 檔案是不完整的，直到最近再次處理相同資料要給同事進 Solr 的時候才發現這個問題，在 Stack Overflow 看到<a href="http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這篇文章<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，才知道其實要做到驗證字元是否合法的方法， Xerces 套件裡面早已經有了，以下方法來自該篇文章：</p>
<pre class="brush: java; gutter: true">/* from http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java */
public static String stripInvalidXmlCharacters(String input) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i &lt; input.length(); i++) {
        char c = input.charAt(i);
        if (XMLChar.isValid(c)) {
            sb.append(c);
        }
    }
    return sb.toString();
}</pre>
<p>只要新增以上方法，透過 Xerces 中的 XMLChar.charAt(int); 方法就可以驗證該傳入的字元是否合法！<br />
附帶一提，在 Xerces 之前的版本，只需要用到 xerces.jar 就可以了，在比較新的版本似乎要載入以下 JAR 檔：resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar。<br />
<strong>參考資料：</strong></p>
<ol>
<li>The Apache XercesTM Project<br />
<address><a href="http://xerces.apache.org/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://xerces.apache.org/<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>The character &#8216;&#8217; is an invalid XML character exception getting while export data in XML file @ XML forum at JavaRanch<br />
<address><a href="http://www.coderanch.com/t/477874/XML/character-invalid-XML-character-exception" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.coderanch.com/t/477874/XML/character-invalid-XML-character-exception<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Stripping Invalid XML characters in Java @ Stack Overflow<br />
<address><a href="http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>使用SAX處理XML檔案 @ JavaWorld@TW <span style="color: #ff0000;">(連結已失效)</span><br />
<address>http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=492</address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/" data-wpel-link="internal">java.io.IOException: The character &#039; &#039; is an invalid XML character</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Eclipse SSH 匯入遠端專案(RSE: Remote System Explorer)</title>
		<link>https://noter.tw/2615/eclipse-ssh-%e5%8c%af%e5%85%a5%e9%81%a0%e7%ab%af%e5%b0%88%e6%a1%88rse-remote-system-explorer/</link>
					<comments>https://noter.tw/2615/eclipse-ssh-%e5%8c%af%e5%85%a5%e9%81%a0%e7%ab%af%e5%b0%88%e6%a1%88rse-remote-system-explorer/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 02 Jan 2013 06:38:08 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Target Management]]></category>
		<category><![CDATA[TM]]></category>
		<category><![CDATA[自動完成]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[click function]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Remote System Explorer]]></category>
		<category><![CDATA[RSE]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2615</guid>

					<description><![CDATA[<p>搭配【在 Eclipse 上開發 PHP 程式(以 Moodle、EGit、PDT 為例) @ 蛙齋】繼續把整個開發方式記錄下來。這篇文章記錄使用 Eclipse 搭配 Remote System E&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2615/eclipse-ssh-%e5%8c%af%e5%85%a5%e9%81%a0%e7%ab%af%e5%b0%88%e6%a1%88rse-remote-system-explorer/" data-wpel-link="internal">Eclipse SSH 匯入遠端專案(RSE: Remote System Explorer)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>搭配<strong><a href="http://wazai.net/2539/%E5%9C%A8eclipse%E4%B8%8A%E9%96%8B%E7%99%BCphp%E7%A8%8B%E5%BC%8F%E4%BB%A5moodle%E3%80%81egit%E3%80%81pdt%E7%82%BA%E4%BE%8B" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">【在 Eclipse 上開發 PHP 程式(以 Moodle、EGit、PDT 為例) @ 蛙齋】<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong>繼續把整個開發方式記錄下來。這篇文章記錄使用 Eclipse 搭配 <a href="http://www.eclipse.org/tm/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Remote System Explorer<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 這個插件，讓 Eclipse 可以直接透過 SSH 或其他方式直接操作遠端專案。<br />
<span id="more-2615"></span></p>
<h1 style="text-align: center;"><strong>【安裝 Remote System Explorer 插件】</strong></h1>
<p>開啟 Eclipse 後，找到上方選單列的&nbsp;Help -&gt; Install New Software&#8230; -&gt; Work with:&nbsp;<span style="color: #ff0000;"><strong>Juno &#8211; http://download.eclipse.org/releases/juno</strong></span> (這邊要把 juno 換成自己的版本名稱) -&gt; 搜尋 <strong><span style="color: #ff0000;">remote</span></strong> -&gt; 勾選下載以下兩個插件</p>
<pre>Remote System Explorer End-User Runtime
Remote System Explorer User Actions</pre>
<p><a title="001.png" href="http://lh5.ggpht.com/-TI0gJ5YNWlU/UOOz-r7fS8I/AAAAAAAAFPU/nL2OPUyfcAE/w640/001.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="001.png" src="//lh5.ggpht.com/-TI0gJ5YNWlU/UOOz-r7fS8I/AAAAAAAAFPU/nL2OPUyfcAE/001.png" alt="001.png"></a></p>
<h1 style="text-align: center;"><strong>【設定 Remote System Explorer 插件】</strong></h1>
<p>安裝完成會要求重新啟動 Eclipse，接著點選右上角的 <span style="color: #ff0000;"><strong>Open Perspective</strong></span> (有一個 + 的)，選擇 <strong><span style="color: #ff0000;">Remote System Explorer</span></strong> 之後就可以看到右上角多了一個<span style="color: #ff0000;"><strong> Remote System Exploer 的快速切換按鈕</strong></span>了。<br />
<a title="002.png" href="http://lh4.ggpht.com/-RLk2uv9yd1I/UOOz-jVqY9I/AAAAAAAAFPQ/A2IVX6I_gJg/w640/002.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="002.png" src="//lh4.ggpht.com/-RLk2uv9yd1I/UOOz-jVqY9I/AAAAAAAAFPQ/A2IVX6I_gJg/002.png" alt="002.png"></a><br />
切換到 Remote System Explorer perspective 後，看到左邊 Remote Systems 視窗中有一個 Define a connection to remote system 的按鈕。<br />
<a title="003.png" href="http://lh4.ggpht.com/-HbsagzdpACg/UOOz-vsaWUI/AAAAAAAAFPY/jmXvI4QTSq0/w640/003.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="003.png" src="//lh4.ggpht.com/-HbsagzdpACg/UOOz-vsaWUI/AAAAAAAAFPY/jmXvI4QTSq0/003.png" alt="003.png"></a><br />
選擇 SSH Only，如果要用其他的協定也可以在這邊使用自己要用的協定。<br />
<a title="004.png" href="http://lh5.ggpht.com/-KVacMniRIy0/UOOz_XvMjoI/AAAAAAAAFPc/FWXdIVY55R0/w640/004.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="004.png" src="//lh5.ggpht.com/-KVacMniRIy0/UOOz_XvMjoI/AAAAAAAAFPc/FWXdIVY55R0/004.png" alt="004.png"></a><br />
輸入遠端主機相關資訊，Parent profile 系統會自動產生，Host name 輸入遠端位址，填寫完畢後按下 Finish。<br />
<a title="005.png" href="http://lh6.ggpht.com/-1HAAaA6UIKg/UOOz_qbwEgI/AAAAAAAAFPg/Q00NMKtmi3A/w640/005.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="005.png" src="//lh6.ggpht.com/-1HAAaA6UIKg/UOOz_qbwEgI/AAAAAAAAFPg/Q00NMKtmi3A/005.png" alt="005.png"></a><br />
在 Remote Systems 可以看到剛剛新增的 remote_moodle 資訊，點進遠端資料夾後會提示登入資訊，登入成功後就可以瀏覽遠端資料夾了。<br />
<a title="006.png" href="http://lh5.ggpht.com/-wH14S4EMviQ/UOOz_8TeXfI/AAAAAAAAFPk/qiEqPh-JDdM/w640/006.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="006.png" src="//lh5.ggpht.com/-wH14S4EMviQ/UOOz_8TeXfI/AAAAAAAAFPk/qiEqPh-JDdM/006.png" alt="006.png"></a></p>
<h1 style="text-align: center;"><strong>【讓 Remote System Explorer 插件支援 PHP】</strong></h1>
<p>Remote System Explorer 剛安裝完成的時候，開啟 PHP 檔案時，自動完成的功能會有問題，從<a href="http://www.patrickjwaters.com/blog/2011-07-24/how-setup-eclipse-php-pdt-remote-system-explorer-theme-manager-and-drupal-plugins/35" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參考資料2<span class="wpel-icon wpel-image wpel-icon-6"></span></a>中發現解法(裡面也包含了很多更詳細的設定)，需要做一些設定檔的修改才可以正常使用，首先設定讓所有的檔案都不隱藏(設定檔是隱藏檔)，Eclipse -&gt; Window -&gt; Preferences。<br />
<a title="007.png" href="http://lh4.ggpht.com/-YC9G1Q70CZw/UOO0APk8BiI/AAAAAAAAFPs/Cm3tgM4kUOk/w640/007.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="007.png" src="//lh4.ggpht.com/-YC9G1Q70CZw/UOO0APk8BiI/AAAAAAAAFPs/Cm3tgM4kUOk/007.png" alt="007.png"></a><br />
找到 Remote Systems -&gt; Files -&gt; 把 Show hidden files 打勾 -&gt; OK。<br />
<a title="008.png" href="http://lh6.ggpht.com/-f8sX6SqkUVQ/UOO0AVTZDNI/AAAAAAAAFPw/bLJ8s_hgDLc/w640/008.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="008.png" src="//lh6.ggpht.com/-f8sX6SqkUVQ/UOO0AVTZDNI/AAAAAAAAFPw/bLJ8s_hgDLc/008.png" alt="008.png"></a><br />
找到 Eclipse 的 workspace 路徑，以 XP 為例，Eclipse 預設在 「<strong>C:\Documents and Settings\<span style="color: #0000ff;">User</span>\workspace</strong>」(User 換成自己登入用的那個)，找到<span style="color: #ff0000;"><strong> workspace 下 RemoteSystemsTempFiles 資料夾</strong></span>，裡面有個 <span style="color: #ff0000;"><strong>.project</strong> </span>檔案。<br />
<a title="009.png" href="http://lh6.ggpht.com/-VpGUQr1e_4M/UOO0AuaQc0I/AAAAAAAAFP8/H8rCFBVhhPo/w640/009.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="009.png" src="//lh6.ggpht.com/-VpGUQr1e_4M/UOO0AuaQc0I/AAAAAAAAFP8/H8rCFBVhhPo/009.png" alt="009.png"></a><br />
開啟後加入以下兩行(<a href="http://www.patrickjwaters.com/blog/2011-07-24/how-setup-eclipse-php-pdt-remote-system-explorer-theme-manager-and-drupal-plugins/35" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參考資料2<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)</p>
<pre>&lt;nature&gt;org.eclipse.wst.jsdt.core.jsNature&lt;/nature&gt;
&lt;nature&gt;org.eclipse.php.core.PHPNature&lt;/nature&gt;</pre>
<p><a title="010.png" href="http://lh3.ggpht.com/-UV2ltbQL_o4/UOO0A2k0eZI/AAAAAAAAFQE/372KJ0woJ-M/w640/010.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="010.png" src="//lh3.ggpht.com/-UV2ltbQL_o4/UOO0A2k0eZI/AAAAAAAAFQE/372KJ0woJ-M/010.png" alt="010.png"></a><br />
存檔後重新啟動 Eclipse，開啟 PHP 檔案試試看，自動完成的功能可以使用囉！<br />
<a title="011.png" href="http://lh5.ggpht.com/-VfNgHP_St7E/UOO0BGyF_CI/AAAAAAAAFQI/lGTZSHam0Vc/w640/011.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="011.png" src="//lh5.ggpht.com/-VfNgHP_St7E/UOO0BGyF_CI/AAAAAAAAFQI/lGTZSHam0Vc/011.png" alt="011.png"></a><br />
&nbsp;<br />
<del>補充：小蛙發現這邊頂多做到自動完成，但其實有一個最最重要的功能並沒有辦法達到，就是 ctrl + click 點選 function 或變數名稱的時候沒辦法直接跳到該 function 或變數所在位置，後來在<a href="http://www.patrickjwaters.com/blog/2011-07-24/how-setup-eclipse-php-pdt-remote-system-explorer-theme-manager-and-drupal-plugins/35" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參考資料2<span class="wpel-icon wpel-image wpel-icon-6"></span></a>中的問答中找到答案，難怪小蛙昨天試的時候還可以，今天再試就不行了，因為把昨天測試的 project 砍掉了 &gt;&lt;，做法就是 import 一份遠端的檔案到 PHP perspective 中，這樣在 Remote System Explorer 就可以直接有上述功能了！</del><br />
補充：要讓 RSE 可以直接透過 click + function 就跳到 function 所在的檔案，主要是該檔案必須要開啟過，也就是說如果有用到 get_username(); 這個 function，而這個 function 存在在 fun_lib.php 的話，那麼在開啟過 fun_lib.php 後，custom function 的自動完成以及 click to function 的功能就會自動跑出來囉！試了好久才發現這件事情，為什麼&#8221;開啟過&#8221;就會自動 link 呢？原因在於開啟之後，會在&nbsp;RemoteSystemsTempFiles 下面放置下載下來的檔案(開啟的時候 Eclipse 就做下載動作了)，最後一個有趣的事情來了，小蛙在編輯 moodle 頁面的時候，裡面有一大堆一大堆看都沒看過的 function，自然也就不知道要去開啟哪些檔案來讓 Eclipse link，後來找到一個方法，在 Remote System Explorer &nbsp;perspective 下，在要編輯的資料夾上點選滑鼠右鍵 -&gt; Synchronize Cache，這樣就可以把該資料夾下的所有檔案先抓一份回來，剩下的就不說囉(這邊如果檔案數量很大的話，可以透過&nbsp;Monitor (或 Show in Table 都可以)，在要抓回來的資料夾上點選滑鼠右鍵 -&gt; Synchronize Cache 也可以喔！</p>
<h1 style="text-align: center;"><strong>【Remote System Explorer 將遠端專案匯入成本機專案(補充)】</strong></h1>
<p>Remote System Explorer 也可以直接匯入遠端 Project 到本機中，但是這樣在本機修改之後就<strong>要自己想辦法&#8221;放&#8221;回遠端</strong>，之前已經做過一些設定，也一併記錄在這邊。<br />
先切換到 PHP perspective。</p>
<p style="text-align: center;"><a title="007.png" href="http://lh5.ggpht.com/-nA7UZ0mH8rs/UOPSto3X4oI/AAAAAAAAFRM/8tNQ8glBI7M/w640/007.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone" title="007.png" src="//lh5.ggpht.com/-nA7UZ0mH8rs/UOPSto3X4oI/AAAAAAAAFRM/8tNQ8glBI7M/007.png" alt="007.png"></a></p>
<p>新增一個 Project。<br />
<a title="008.png" href="http://lh4.ggpht.com/-Zmk3KbvG1B8/UOPStspeUvI/AAAAAAAAFRI/DmuG-AbnJ9c/w640/008.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="008.png" src="//lh4.ggpht.com/-Zmk3KbvG1B8/UOPStspeUvI/AAAAAAAAFRI/DmuG-AbnJ9c/008.png" alt="008.png"></a><br />
選擇 General -&gt; Project (一般專案)<br />
<a title="009.png" href="http://lh4.ggpht.com/-fHATYvE0xXg/UOPStt5OEPI/AAAAAAAAFRQ/CO17aDAXYnk/w640/009.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="009.png" src="//lh4.ggpht.com/-fHATYvE0xXg/UOPStt5OEPI/AAAAAAAAFRQ/CO17aDAXYnk/009.png" alt="009.png"></a><br />
輸入專案名稱後點選 Finish。<br />
<a title="010.png" href="http://lh3.ggpht.com/-iRgZyA4cs_E/UOPSuMxbPMI/AAAAAAAAFRU/OPz0tInfDVg/w640/010.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="010.png" src="//lh3.ggpht.com/-iRgZyA4cs_E/UOPSuMxbPMI/AAAAAAAAFRU/OPz0tInfDVg/010.png" alt="010.png"></a><br />
切換到 Remote System Explorer perspective 在要匯入的專案上點選滑鼠右鍵，選擇<span style="color: #ff0000;"><strong> Import To Project</strong></span>。<br />
<a title="011.png" href="http://lh5.ggpht.com/-EBPoI2ghVys/UOPSuuSHK_I/AAAAAAAAFRY/mpm6bfErazw/w640/011.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="011.png" src="//lh5.ggpht.com/-EBPoI2ghVys/UOPSuuSHK_I/AAAAAAAAFRY/mpm6bfErazw/011.png" alt="011.png"></a><br />
這邊卡了非常非常久，因為小蛙要匯入的專案很大，到這個頁面的時候，一直出現 <span style="color: #ff0000;"><strong>Enter or select a source folder.</strong> </span>的錯誤，導致 Finish 無法成功按下，後來才發現右下角有一個 Querying All 的進度條在跑，大一點的專案甚至可能要等超過十分鐘，Into folder: 這邊選擇要匯入的專案中(這邊例子是剛剛建立的 test)。<br />
<a title="012.png" href="http://lh4.ggpht.com/-P4ekAqGPzXA/UOPSumFejuI/AAAAAAAAFRc/I1NTOriNTnc/w640/012.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="012.png" src="//lh4.ggpht.com/-P4ekAqGPzXA/UOPSumFejuI/AAAAAAAAFRc/I1NTOriNTnc/012.png" alt="012.png"></a><br />
完成後切回 PHP perspective，就可以看到剛剛匯入的專案在這邊了(因為要抓太久，小蛙拿之前抓好的圖來替代)，在專案上點選滑鼠右鍵 -&gt; Configure -&gt; Add PHP Support &#8230; 讓專案變成 PHP 專案，大功告成！<br />
<a title="013.png" href="http://lh3.ggpht.com/-wDJDShcxgJs/UOPSvMFjtjI/AAAAAAAAFRo/6oRnNLOauYo/w640/013.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="aligncenter" title="013.png" src="//lh3.ggpht.com/-wDJDShcxgJs/UOPSvMFjtjI/AAAAAAAAFRo/6oRnNLOauYo/013.png" alt="013.png"></a><br />
<strong>參考資料：</strong></p>
<ol>
<li>在 Eclipse 上開發 PHP 程式(以 Moodle、EGit、PDT 為例) @ 蛙齋<br />
<address><a href="http://wazai.net/2539/%E5%9C%A8eclipse%E4%B8%8A%E9%96%8B%E7%99%BCphp%E7%A8%8B%E5%BC%8F%E4%BB%A5moodle%E3%80%81egit%E3%80%81pdt%E7%82%BA%E4%BE%8B" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://wazai.net/2539/%E5%9C%A8eclipse%E4%B8%8A%E9%96%8B%E7%99%BCphp%E7%A8%8B%E5%BC%8F%E4%BB%A5moodle%E3%80%81egit%E3%80%81pdt%E7%82%BA%E4%BE%8B<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>How to setup Eclipse with PHP PDT, Remote System Explorer, Theme Manager, and Drupal Plugins @ Patrick J Waters<br />
<address><a href="http://www.patrickjwaters.com/blog/2011-07-24/how-setup-eclipse-php-pdt-remote-system-explorer-theme-manager-and-drupal-plugins/35" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.patrickjwaters.com/blog/2011-07-24/how-setup-eclipse-php-pdt-remote-system-explorer-theme-manager-and-drupal-plugins/35<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Code Completion not working with remote file (with RSE) @ stackoverflow<br />
<address><a href="http://stackoverflow.com/questions/5896909/code-completion-not-working-with-remote-file-with-rse" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://stackoverflow.com/questions/5896909/code-completion-not-working-with-remote-file-with-rse<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2615/eclipse-ssh-%e5%8c%af%e5%85%a5%e9%81%a0%e7%ab%af%e5%b0%88%e6%a1%88rse-remote-system-explorer/" data-wpel-link="internal">Eclipse SSH 匯入遠端專案(RSE: Remote System Explorer)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2615/eclipse-ssh-%e5%8c%af%e5%85%a5%e9%81%a0%e7%ab%af%e5%b0%88%e6%a1%88rse-remote-system-explorer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>java/lang/NoClassDefFoundError: java/lang/Object</title>
		<link>https://noter.tw/2283/javalangnoclassdeffounderror-javalangobject/</link>
					<comments>https://noter.tw/2283/javalangnoclassdeffounderror-javalangobject/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 07 Sep 2012 09:45:40 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[NoClassDefFoundError]]></category>
		<category><![CDATA[jvm]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2283</guid>

					<description><![CDATA[<p>今天小蛙要使用 Eclipse 的時候發現開啟的時候，馬上就又瞬間關閉，連個錯誤訊息都沒有看到，有錯誤訊息大概還能看一下問題出在哪，最怕這種完全沒有任何訊息的問題 &#8230; 花了五分鐘 Goog&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2283/javalangnoclassdeffounderror-javalangobject/" data-wpel-link="internal">java/lang/NoClassDefFoundError: java/lang/Object</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>今天小蛙要使用 Eclipse 的時候發現開啟的時候，馬上就又瞬間關閉，連個錯誤訊息都沒有看到，有錯誤訊息大概還能看一下問題出在哪，最怕這種完全沒有任何訊息的問題 &#8230; 花了五分鐘 Google 搞定，這邊記錄一下，免得下次又發生這種情況。<br />
<span id="more-2283"></span><br />
這裡小蛙只簡單的讓 Eclipse 可以正常使用，並沒有完全解決這個問題，如果您的 Eclipse 或其他需要用到 jre 的東西無法開啟的時候，可以試試看以下方法。簡單描述一下小蛙遇到的問題，昨天 Eclipse 還好好的正常執行，到了今天卻怎麼也打不開，期間印象中沒有安裝東西(除了 flash 更新)，不知怎麼的就突然無法使用了，點了 Eclipse 圖示後閃了一下就快速關閉，沒有任何錯誤訊息，Eclipse 下也沒有看到錯誤記錄 &#8230;<br />
這時候只好上 Google 查查看有沒有解決方法，網路上大部分看到的問題都是會跳出 alert 視窗並且告訴開發者有錯誤，跟這次小蛙遇到的情況不太一樣，最後找到這篇文章 <a href="http://topic.csdn.net/u/20090720/23/7e75dd4a-7a54-4840-972d-11b1bc6c538f.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://topic.csdn.net/u/20090720/23/7e75dd4a-7a54-4840-972d-11b1bc6c538f.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;跟小蛙的情況是一樣的，該文章的留言中有其他開發者提到</p>
<blockquote><p>第一：机器配置不够，或暂时系统进程异常。我以前碰到过，重启后就OK<br />
第二：jdk配置有问题。</p></blockquote>
<p>第一點小蛙已經重開過了(傳說中遇到無法解決的問題就先重開看看，有時候會莫名其妙就好了)，但還是沒有好轉，第二個方法小蛙覺得設定完全沒有改過，怎麼會是JDK配置問題呢？往下看後有人提到</p>
<blockquote><p>打开个CMD，输入java　后回车，看有没有jDK的信息，找不到这个命令的话，就是你的JDK没有设置path</p></blockquote>
<p>照著做之後果然發現錯誤訊息，真是太令人感動了！</p>
<blockquote><p>Error occurred during initialization of VM<br />
java/lang/NoClassDefFoundError: java/lang/Object</p></blockquote>
<p>在不花費太多時間的情況下(初步猜測是某個 jre 版本爛掉了)，開啟 jdk 安裝路徑發現竟然有好幾個 jre，偷雞快速解決方式 &#8230; 直接把路徑設定成另一個 jre 看看，果然成功，等工作完成後有時間再來看看原本的 jre 到底出了什麼問題吧！(網路上查到重新安裝 jdk, jre 可以解決問題，暫時先頂著用囉！)</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2283/javalangnoclassdeffounderror-javalangobject/" data-wpel-link="internal">java/lang/NoClassDefFoundError: java/lang/Object</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2283/javalangnoclassdeffounderror-javalangobject/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
