<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "關於try catch 的問題?"]]></title>
		<link>https://forum.andowson.com/posts/list/5.page</link>
		<description><![CDATA[Latest messages posted in the topic "關於try catch 的問題?"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>關於try catch 的問題?</title>
				<description><![CDATA[ 我弄個詢問功能且會顯示出來，如下所示： 
<br>
[code] 
<br>
C:\JAVA_WORK&gt;javac ReadXMLFile.java 
<br>
<br>
C:\JAVA_WORK&gt;java ReadXMLFile 
<br>
<br>
輸入分類號：0299 
<br>
<br>
年度號 : 0085 
<br>
分類號 : 0299 
<br>
案次號 : 001 
<br>
<br>
年度號 : 0085 
<br>
分類號 : 0299 
<br>
案次號 : 002 
<br>
<br>
年度號 : 0089 
<br>
分類號 : 0299 
<br>
案次號 : 001 
<br>
<br>
C:\JAVA_WORK&gt; 
<br>
[/code] 
<br>
<br>
目前的錯誤訊息如下： 
<br>
[code] 
<br>
C:\JAVA_WORK&gt;java ReadXMLFile 
<br>
輸入分類號： 
<br>
Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
<br>
<br>
 at java.lang.NumberFormatException.forInputString(Unknown Source) 
<br>
 at java.lang.Integer.parseInt(Unknown Source) 
<br>
 at java.lang.Integer.parseInt(Unknown Source) 
<br>
 at ReadXMLFile.main(ReadXMLFile.java:20) 
<br>
<br>
C:\JAVA_WORK&gt;[/code] 
<br>
<br>
我想設一個[try-catch]機制"找不到的情況"，如下所示？ 
<br>
當我輸入一個不存在或沒有該屬於分類號就會印出"查無此分類號！請重新輸入..."。 
<br>
[code] 
<br>
C:\JAVA_WORK&gt;javac ReadXMLFile.java 
<br>
<br>
C:\JAVA_WORK&gt;java ReadXMLFile 
<br>
<br>
輸入分類號：0419 
<br>
<br>
查無此分類號！請重新輸入... 
<br>
<br>
C:\JAVA_WORK&gt; 
<br>
[/code] 
<br>
懇請指點一下&lt;(_ _)&gt; 
<br>
<br>
程式碼如下： 
<br>
[code] 
<br>
import java.io.*; 
<br>
import java.io.File; 
<br>
import java.io.IOException; 
<br>
import java.util.Scanner; 
<br>
import java.util.List; 
<br>
<br>
import org.jdom.Document; 
<br>
import org.jdom.Element; 
<br>
import org.jdom.JDOMException; 
<br>
import org.jdom.input.SAXBuilder; 
<br>
<br>
public class SearchFile { 
<br>
 public static void main(String[] args) throws IOException { 
<br>
<br>
 SAXBuilder builder = new SAXBuilder(); 
<br>
 File xmlFile = new File("C:\\JAVA_WORK\\test1.xml"); 
<br>
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
<br>
 System.out.print("輸入分類號："); 
<br>
 String s = br.readLine(); 
<br>
 int num = Integer.parseInt(s); 
<br>
<br>
 try { 
<br>
 Document document = (Document) builder.build(xmlFile); 
<br>
 Element rootNode = document.getRootElement(); 
<br>
 List list = rootNode.getChildren("ROW"); 
<br>
<br>
 for (int i = 0; i &lt; list.size(); i++) 
<br>
 { 
<br>
 Element node = (Element) list.get(i); 
<br>
<br>
 if (node.getChildText("分類號").equals(""+s)) 
<br>
 { 
<br>
 System.out.println("年度號 : " + node.getChildText("年度號")); 
<br>
 System.out.println("分類號 : " + node.getChildText("分類號")); 
<br>
 System.out.println("案次號 : " + node.getChildText("案次號")); 
<br>
 Scanner input = new Scanner(System.in); 
<br>
 input.hasNextLine(); 
<br>
 } 
<br>
<br>
 } 
<br>
<br>
<br>
 } catch (IOException io) { 
<br>
 System.out.println(io.getMessage()); 
<br>
 } catch (JDOMException jdomex) { 
<br>
 System.out.println(jdomex.getMessage()); 
<br>
 } 
<br>
 } 
<br>
} 
<br>
[/code] 
<br>
xml格式如下： 
<br>
[code] 
<br>
&lt;?xml version = '1.0' encoding = 'Big5'?&gt; 
<br>
&lt;!DOCTYPE ROWSET [ 
<br>
&lt;!ELEMENT ROWSET (ROW)*&gt; 
<br>
&lt;!ELEMENT ROW (年度號, 案名?, 分類號, 案次號 )&gt; 
<br>
&lt;!ATTLIST ROW num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 電子檔案名稱 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 附件名稱 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 附件媒體型式 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 附件數量 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 附件單位 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 主題 num CDATA #REQUIRED&gt; 
<br>
&lt;!ATTLIST 附註 num CDATA #REQUIRED&gt; 
<br>
&lt;!ELEMENT 案名 (#PCDATA)&gt; 
<br>
&lt;!ELEMENT 年度號 (#PCDATA)&gt; 
<br>
&lt;!ELEMENT 分類號 (#PCDATA)&gt; 
<br>
&lt;!ELEMENT 案次號 (#PCDATA)&gt; 
<br>
]&gt; 
<br>
<br>
&lt;ROWSET&gt; 
<br>
<br>
 &lt;ROW num="1"&gt; 
<br>
 年度號 : 0072 
<br>
 分類號 : 200 
<br>
 案次號 : 001 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="2"&gt; 
<br>
 年度號 : 0070 
<br>
 分類號 : 200 
<br>
 案次號 : 002 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="3"&gt; 
<br>
 年度號 : 0076 
<br>
 分類號 : 011 
<br>
 案次號 : 004 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="4"&gt; 
<br>
 年度號 : 0091 
<br>
 分類號 : 011 
<br>
 案次號 : 001 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="5"&gt; 
<br>
 年度號 : 0086 
<br>
 分類號 : 0102 
<br>
 案次號 : 053 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="6"&gt; 
<br>
 年度號 : 0081 
<br>
 分類號 : 012 
<br>
 案次號 : 023 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="7"&gt; 
<br>
 年度號 : 0071 
<br>
 分類號 : 112 
<br>
 案次號 : 013 
<br>
 &lt;/ROW&gt; 
<br>
<br>
&lt;/ROWSET&gt; 
<br>
[/code]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/571/1203.page</guid>
				<link>https://forum.andowson.com/posts/preList/571/1203.page</link>
				<pubDate><![CDATA[Wed, 25 Jan 2012 13:47:46]]> GMT</pubDate>
				<author><![CDATA[ crc2121]]></author>
			</item>
			<item>
				<title>回覆:關於try catch 的問題?</title>
				<description><![CDATA[ 依我的了解，您應該是想要在輸入的內容是空白或是不存在時都顯示一個錯誤訊息來提醒使用者吧？ 
<br>
<br>
設計的想法是： 
<br>
利用一個boolean變數found，初始值為false，然後比對輸入的字串s，如果不是null時程式會利用for迴圈拜訪每個XML文件樹的節點，如果內容等於我們讀取到的分類號時，才將found設為true，並輸出結果，並等待使用者按下Enter才顯示下一筆。 
<br>
以下是參考範例ReadXMLFile.java: 
<br>
[code] 
<br>
import java.io.*; 
<br>
import java.io.File; 
<br>
import java.io.IOException; 
<br>
import java.util.Scanner; 
<br>
import java.util.List; 
<br>
<br>
import org.jdom.Document; 
<br>
import org.jdom.Element; 
<br>
import org.jdom.JDOMException; 
<br>
import org.jdom.input.SAXBuilder; 
<br>
<br>
public class ReadXMLFile { 
<br>
 public static void main(String[] args) throws IOException { 
<br>
<br>
 SAXBuilder builder = new SAXBuilder(); 
<br>
 File xmlFile = new File("C:\\JAVA_WORK\\test1.xml"); 
<br>
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
<br>
 System.out.print("輸入分類號："); 
<br>
 String s = br.readLine(); 
<br>
 boolean found = false; 
<br>
<br>
 if (s != null) { 
<br>
 try { 
<br>
 Document document = (Document) builder.build(xmlFile); 
<br>
 Element rootNode = document.getRootElement(); 
<br>
 List list = rootNode.getChildren("ROW"); 
<br>
<br>
 for (int i = 0; i &lt; list.size(); i++) 
<br>
 { 
<br>
 Element node = (Element) list.get(i); 
<br>
<br>
 if (node.getChildText("分類號").equals(s)) 
<br>
 { 
<br>
 System.out.println("年度號 : " + node.getChildText("年度號")); 
<br>
 System.out.println("分類號 : " + node.getChildText("分類號")); 
<br>
 System.out.println("案次號 : " + node.getChildText("案次號")); 
<br>
 Scanner input = new Scanner(System.in); 
<br>
 input.hasNextLine(); 
<br>
 found = true;; 
<br>
 } 
<br>
 } 
<br>
 } catch (IOException io) { 
<br>
 System.out.println(io.getMessage()); 
<br>
 } catch (JDOMException jdomex) { 
<br>
 System.out.println(jdomex.getMessage()); 
<br>
 } 
<br>
 } 
<br>
 if (!found) { 
<br>
 System.out.println("查無此分類號！請重新輸入..."); 
<br>
 } 
<br>
 } 
<br>
} 
<br>
[/code] 
<br>
以下是參考用的輸入檔test1.xml: 
<br>
[code=xml] 
<br>
&lt;ROWSET&gt; 
<br>
 &lt;ROW num="1"&gt; 
<br>
 &lt;年度號&gt;0080&lt;/年度號&gt; 
<br>
 &lt;分類號&gt;010302&lt;/分類號&gt; 
<br>
 &lt;案次號&gt;002&lt;/案次號&gt; 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="2"&gt; 
<br>
 &lt;年度號&gt;0078&lt;/年度號&gt; 
<br>
 &lt;分類號&gt;011602&lt;/分類號&gt; 
<br>
 &lt;案次號&gt;002&lt;/案次號&gt; 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="3"&gt; 
<br>
 &lt;年度號&gt;0070&lt;/年度號&gt; 
<br>
 &lt;分類號&gt;019302&lt;/分類號&gt; 
<br>
 &lt;案次號&gt;011&lt;/案次號&gt; 
<br>
 &lt;/ROW&gt; 
<br>
 &lt;ROW num="1225"&gt; 
<br>
 &lt;年度號&gt;0099&lt;/年度號&gt; 
<br>
 &lt;分類號&gt;018719&lt;/分類號&gt; 
<br>
 &lt;案次號&gt;111&lt;/案次號&gt; 
<br>
 &lt;/ROW&gt; 
<br>
&lt;/ROWSET&gt; 
<br>
[/code]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/571/1204.page</guid>
				<link>https://forum.andowson.com/posts/preList/571/1204.page</link>
				<pubDate><![CDATA[Thu, 26 Jan 2012 18:24:03]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
	</channel>
</rss>