﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-实践-全程-随笔分类-JDK5.0</title><link>http://www.blogjava.net/leeguannan/category/22459.html</link><description>够了，让我们实践吧！</description><language>zh-cn</language><lastBuildDate>Thu, 29 Nov 2007 16:08:56 GMT</lastBuildDate><pubDate>Thu, 29 Nov 2007 16:08:56 GMT</pubDate><ttl>60</ttl><item><title>JAVA如何调用DOS命令</title><link>http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html</link><dc:creator>阿南</dc:creator><author>阿南</author><pubDate>Thu, 29 Nov 2007 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html</guid><wfw:comment>http://www.blogjava.net/leeguannan/comments/164044.html</wfw:comment><comments>http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/leeguannan/comments/commentRss/164044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leeguannan/services/trackbacks/164044.html</trackback:ping><description><![CDATA[<p>用Java编写应用时，有时需要在程序中调用另一个现成的可执行程序或系统命令，这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式：    <br />...     <br />Process process = Runtime.getRuntime().exec(&quot;.\\p.exe&quot;);     <br />process.waitfor( );     <br />...     <br />在上面的程序中，第一行的&#8220;.\\p.exe&#8221;是要执行的程序名，Runtime.getRuntime()返回当前应用程序的Runtime对象，该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序，并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。     <br />但在windows平台上，如果处理不当，有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况：     <br />1、执行DOS的内部命令     <br />如果要执行一条DOS内部命令，有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如，执行dir命令，在NT上， 可写成exec(&quot;cmd.exe /c dir&quot;)，在windows 95/98下，可写成&#8220;command.exe /c dir&#8221;，其中参数&#8220;/c&#8221;表示命令执行后关闭Dos立即关闭窗口。另一种方法是，把内部命令放在一个批命令my_dir.bat文件中，在Java程序中写成exec(&quot;my_dir.bat&quot;)。如果仅仅写成exec(&quot;dir&quot;)，Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性，需要在程序中读取运行的操作系统平台，以调用不同的命令解释器。后一种方法则不需要做更多的处理。     <br />2、打开一个不可执行的文件     <br />打开一个不可执行的文件，但该文件存在关联的应用程序，则可以有两种方式。 以打开一个word文档a.doc文件为例，Java中可以有以下两种写法：     <br />exec(&quot;start .\\a.doc&quot;);     <br />exec(&quot; c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc&quot;);     <br />显然，前一种方法更为简捷方便。     <br />3、执行一个有标准输出的DOS可执行程序     <br />在windows平台上，运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭，从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是，该可执行程序的标准输出比较多，而运行窗口的标准输出缓冲区不够大。解决的办法是，利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出，在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下：     <br />...     <br />String ls_1;     <br />Process process = Runtime.getRuntime().exec(&quot;cmd /c dir \\windows&quot;);     <br />BufferedReader bufferedReader = new BufferedReader( \     <br />new InputStreamReader(process.getInputStream());     <br />while ( (ls_1=bufferedReader.readLine()) != null)     <br />System.out.println(ls_1);     <br />     <br />process.waitfor( );     <br />...</p>  <p>以上内容为转载~下面内容为原创！</p>  <p>今天在做客户端程序的自动更新，简单描述一下，就是从服务器上将更新包下载下来，然后在本地解压缩，最后删掉~功能很简单~</p>  <p>但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单，资源需要释放，一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题，但是好在，客户端程序更新完是要重启的，一切都烟消云散了~对于删除不掉ZIP文件的问题，我也流氓一下~用DEL硬删除~此处一定要注意！</p>  <p>Process process = Runtime.getRuntime().exec(&quot;cmd /c del f:\\aaa.doc&quot;);    <br />这样的调用是没有问题~</p>  <p>Process process = Runtime.getRuntime().exec(&quot;del f:\\aaa.doc&quot;);    <br />这样写是不可能对的~</p>  <p>记录一下，警告一下后人！</p> <img src ="http://www.blogjava.net/leeguannan/aggbug/164044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leeguannan/" target="_blank">阿南</a> 2007-11-29 17:17 <a href="http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么读取.properties文件时出现&amp;ldquo;java.lang.IllegalArgumentException: Malformed \uxxxx encoding&amp;rdquo;</title><link>http://www.blogjava.net/leeguannan/archive/2007/11/28/163782.html</link><dc:creator>阿南</dc:creator><author>阿南</author><pubDate>Wed, 28 Nov 2007 11:18:00 GMT</pubDate><guid>http://www.blogjava.net/leeguannan/archive/2007/11/28/163782.html</guid><wfw:comment>http://www.blogjava.net/leeguannan/comments/163782.html</wfw:comment><comments>http://www.blogjava.net/leeguannan/archive/2007/11/28/163782.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/leeguannan/comments/commentRss/163782.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leeguannan/services/trackbacks/163782.html</trackback:ping><description><![CDATA[<p>今天同事在做调用EJB读取properties文件时报出</p>  <p>java.lang.IllegalArgumentException: Malformed \uxxxx encoding </p>  <p>异常！没有见过！</p>  <p>这个properties文件中配置了文件夹的真实路径，但是java的Properties竟然无法读取！真是郁闷！</p>  <p>g.cn了一下，才发现其中原由，原来java在读取properties文件是遇到\就会出现</p>  <p>java.lang.IllegalArgumentException: Malformed \uxxxx encoding </p>  <p>异常，问题在这里！</p>  <p>仅仅把里面出现的\转换为/就可以了！</p> <img src ="http://www.blogjava.net/leeguannan/aggbug/163782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leeguannan/" target="_blank">阿南</a> 2007-11-28 19:18 <a href="http://www.blogjava.net/leeguannan/archive/2007/11/28/163782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>