<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java<span class="_ _0"> </span><span class="ff2">编程第<span class="_ _1"></span>十三<span class="_ _1"></span>讲<span class="_ _1"></span> <span class="_ _1"></span></span>IO<span class="_ _0"> </span><span class="ff2">系统</span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0">By Har<span class="_ _2"></span>ry Lee</div><div class="t m0 x3 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0">Web:<span class="_ _2"></span> <span class="fc1">http://www.effortech.net</span></div><div class="t m0 x4 h3 y1 ff3 fs1 fc0 sc0 ls0 ws0">Emai<span class="_ _2"></span>l:<span class="_ _2"></span> <span class="fc1">ji<span class="_ _2"></span>hs<span class="_ _2"></span>ian_<span class="_ _2"></span>lee<span class="_ _2"></span>@hot<span class="_ _2"></span>mail<span class="_ _2"></span>.com<span class="_ _2"></span><span class="fc0">; <span class="fc1">harry<span class="_ _2"></span>@ef<span class="_ _2"></span>fortech.ne<span class="_ _2"></span>t</span></span></span></div><div class="t m0 x5 h3 y4 ff3 fs1 fc0 sc0 ls0 ws0">phone: 136 0938 5098</div><div class="t m0 x6 h4 y5 ff2 fs2 fc0 sc0 ls0 ws0">第十三<span class="_ _1"></span>讲<span class="_ _3"> </span><span class="ff4">Java I/<span class="_ _2"></span>O<span class="_ _3"> </span><span class="ff2">系统</span></span></div><div class="t m0 x7 h5 y6 ff2 fs3 fc0 sc0 ls0 ws0">他应该瞪大眼睛盯着诺亚,</div><div class="t m0 x8 h5 y7 ff2 fs3 fc0 sc0 ls0 ws0">好好学习一下,</div><div class="t m0 x9 h5 y8 ff2 fs3 fc0 sc0 ls0 ws0">看他们是怎样把那么多东西装到一个小小的方舟上的。</div><div class="t m0 xa h5 y9 ff3 fs3 fc0 sc0 ls0 ws0">—— <span class="ff2">西德尼</span></div><div class="t m0 xb h6 ya ff2 fs4 fc0 sc0 ls0 ws0">十三、<span class="ff4">J<span class="_ _1"></span>av<span class="_ _2"></span>a I/O<span class="_ _0"> </span><span class="ff2">系统</span></span></div><div class="t m0 xb h5 yb ff2 fs3 fc0 sc0 ls0 ws0">第十三讲<span class="_ _4"> </span><span class="ff3">Java I/O<span class="_ _4"> </span></span>系统<span class="_ _2"></span><span class="ff3">.......................................................................................................................<span class="_ _5"> </span>1</span></div><div class="t m0 xc h5 yc ff3 fs3 fc0 sc0 ls0 ws0">1.<span class="ff2">类<span class="_ _4"> </span></span>File...........................................................................................................................................<span class="_ _6"> </span>3</div><div class="t m0 xd h7 yd ff2 fs5 fc0 sc0 ls0 ws0">列出文件夹的文件清单<span class="_ _1"></span><span class="ff3">..........................................................................................................................<span class="_ _5"> </span>3</span></div><div class="t m0 xd h7 ye ff2 fs5 fc0 sc0 ls0 ws0">检查文件夹,生成文件夹<span class="_ _1"></span><span class="ff3">......................................................................................................................<span class="_ _5"> </span>4</span></div><div class="t m0 xc h5 yf ff3 fs3 fc0 sc0 ls0 ws0">2.<span class="ff2">输入输出</span>......................................................................................................................................<span class="_ _6"> </span>6</div><div class="t m0 xd h7 y10 ff3 fs5 fc0 sc0 ls0 ws0">InputStream<span class="_ _5"> </span><span class="ff2">的<span class="_ _1"></span>类别</span>..................................................................................................................................<span class="_ _7"></span>6</div><div class="t m0 xd h7 y11 ff3 fs5 fc0 sc0 ls0 ws0">OutputStream<span class="_ _4"> </span><span class="ff2">的类别</span>...............................................................................................................................<span class="_ _8"> </span>8</div><div class="t m0 xc h5 y12 ff3 fs3 fc0 sc0 ls0 ws0">3.<span class="ff2">增加有用的属性和接口</span>..............................................................................................................<span class="_ _6"> </span>9</div><div class="t m0 xd h7 y13 ff3 fs5 fc0 sc0 ls0 ws0">FilterInputSt<span class="_ _1"></span>ream<span class="_ _4"> </span><span class="ff2">过滤输入流</span>...............................................................................................................<span class="_ _9"> </span>10</div><div class="t m0 xd h7 y14 ff3 fs5 fc0 sc0 ls0 ws0">FilterOutpu<span class="_ _1"></span>tStrea<span class="_ _1"></span>m<span class="_ _5"> </span><span class="ff2">过滤输出流<span class="_ _1"></span></span>............................................................................................................<span class="_ _5"> </span>11</div><div class="t m0 xc h5 y15 ff3 fs3 fc0 sc0 ls0 ws0">4.Reader<span class="_ _4"> </span><span class="ff2">及<span class="_ _4"> </span></span>Writer.........................................................................................................................<span class="_ _8"> </span>12</div><div class="t m0 xd h7 y16 ff2 fs5 fc0 sc0 ls0 ws0">数据源和数据汇点<span class="ff3">................................................................................................................................<span class="_"> </span>13</span></div><div class="t m0 xd h7 y17 ff2 fs5 fc0 sc0 ls0 ws0">改变数据流的行为<span class="ff3">................................................................................................................................<span class="_"> </span>13</span></div><div class="t m0 xd h7 y18 ff2 fs5 fc0 sc0 ls0 ws0">没有改变的类<span class="ff3">........................................................................................................................................<span class="_"> </span>16</span></div><div class="t m0 xc h8 y19 ff3 fs3 fc0 sc0 ls0 ws0">5.RandomAccessFile.....................................................................................................................<span class="_ _4"> </span>16</div><div class="t m0 xc h5 y1a ff3 fs3 fc0 sc0 ls0 ws0">6.I/O<span class="_ _5"> </span><span class="ff2">流的使用方法</span>......................................................................................................................<span class="_ _6"> </span>17</div><div class="t m0 xd h7 y1b ff2 fs5 fc0 sc0 ls0 ws0">输入流<span class="ff3">....................................................................................................................................................<span class="_"> </span>19</span></div><div class="t m0 xd h7 y1c ff2 fs5 fc0 sc0 ls0 ws0">输出流<span class="ff3">....................................................................................................................................................<span class="_"> </span>21</span></div><div class="t m0 xd h7 y1d ff2 fs5 fc0 sc0 ls0 ws0">管道流<span class="ff3">....................................................................................................................................................<span class="_"> </span>22</span></div><div class="t m0 xc h5 y1e ff3 fs3 fc0 sc0 ls0 ws0">7.<span class="ff2">标准<span class="_ _4"> </span></span>I/O<span class="_ _2"></span>......................................................................................................................................<span class="_ _4"> </span>22</div><div class="t m0 xd h7 y1f ff2 fs5 fc0 sc0 ls0 ws0">从标准输入读入<span class="ff3">....................................................................................................................................<span class="_"> </span>22</span></div><div class="t m0 xd h7 y20 ff2 fs5 fc0 sc0 ls0 ws0">将<span class="_ _5"> </span><span class="ff3">System.out<span class="_ _4"> </span></span>转换为<span class="_ _4"> </span><span class="ff3">PrintWri<span class="_ _1"></span>ter..........................................................................................................<span class="_ _7"></span>23</span></div><div class="t m0 xd h7 y21 ff2 fs5 fc0 sc0 ls0 ws0">标准<span class="_ _4"> </span><span class="ff3">I/O<span class="_ _5"> </span></span>重定向<span class="ff3">.....................................................................................................................................<span class="_"> </span>23</span></div><div class="t m0 xc h5 y22 ff3 fs3 fc0 sc0 ls0 ws0">8.<span class="ff2">新<span class="_ _4"> </span></span>I/O<span class="_ _2"></span>..........................................................................................................................................<span class="_ _4"> </span>24</div><div class="t m0 xd h7 y23 ff2 fs5 fc0 sc0 ls0 ws0">数据转换<span class="ff3">................................................................................................................................................<span class="_"> </span>27</span></div><div class="t m0 xe h9 y24 ff3 fs6 fc0 sc0 ls0 ws0">13-(1/52)</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/bg2.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java<span class="_ _0"> </span><span class="ff2">编程第<span class="_ _1"></span>十三<span class="_ _1"></span>讲<span class="_ _1"></span> <span class="_ _1"></span></span>IO<span class="_ _6"> </span><span class="ff2">系<span class="_ _1"></span>统</span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0">By Har<span class="_ _2"></span>ry Lee</div><div class="t m0 x3 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0">Web:<span class="_ _2"></span> <span class="fc1">http://www.effortech.net</span></div><div class="t m0 x4 h3 y1 ff3 fs1 fc0 sc0 ls0 ws0">Emai<span class="_ _2"></span>l:<span class="_ _2"></span> <span class="fc1">ji<span class="_ _2"></span>hs<span class="_ _2"></span>ian_<span class="_ _2"></span>lee<span class="_ _2"></span>@hot<span class="_ _2"></span>mail<span class="_ _2"></span>.com<span class="_ _2"></span><span class="fc0">; <span class="fc1">harry<span class="_ _2"></span>@ef<span class="_ _2"></span>fortech.ne<span class="_ _2"></span>t</span></span></span></div><div class="t m0 x5 h3 y4 ff3 fs1 fc0 sc0 ls0 ws0">phone: 136 0938 5098</div><div class="t m0 xd h7 y25 ff2 fs5 fc0 sc0 ls0 ws0">处理基本数据类型<span class="ff3">................................................................................................................................<span class="_"> </span>30</span></div><div class="t m0 xd h7 y26 ff3 fs5 fc0 sc0 ls0 ws0">Buffer<span class="_ _4"> </span><span class="ff2">内幕</span>.............................................................................................................................................<span class="_ _9"> </span>30</div><div class="t m0 xd h7 y27 ff2 fs5 fc0 sc0 ls0 ws0">内存映像文件<span class="ff3">........................................................................................................................................<span class="_"> </span>31</span></div><div class="t m0 xd h7 y28 ff2 fs5 fc0 sc0 ls0 ws0">性能<span class="ff3">........................................................................................................................................................<span class="_"> </span>32</span></div><div class="t m0 xd h7 y29 ff2 fs5 fc0 sc0 ls0 ws0">文件锁闭<span class="ff3">................................................................................................................................................<span class="_"> </span>34</span></div><div class="t m0 xc h5 y2a ff3 fs3 fc0 sc0 ls0 ws0">9.<span class="ff2">压缩</span>............................................................................................................................................<span class="_ _6"> </span>35</div><div class="t m0 xd h7 y2b ff2 fs5 fc0 sc0 ls0 ws0">生成<span class="_ _4"> </span><span class="ff3">GZ<span class="_ _2"></span>IP<span class="_ _5"> </span><span class="ff2">压缩文件</span>..............................................................................................................................<span class="_ _9"> </span>36</span></div><div class="t m0 xc h5 y2c ff3 fs3 fc0 sc0 ls0 ws0">10.<span class="ff2">对象串行化</span>..............................................................................................................................<span class="_ _6"> </span>37</div><div class="t m0 xd h7 y2d ff2 fs5 fc0 sc0 ls0 ws0">恢复对象<span class="ff3">................................................................................................................................................<span class="_"> </span>40</span></div><div class="t m0 xc h5 y2e ff3 fs3 fc0 sc0 ls0 ws0">11.<span class="ff2">正则表达式</span>..............................................................................................................................<span class="_ _6"> </span>41</div><div class="t m0 xd h7 y2f ff2 fs5 fc0 sc0 ls0 ws0">生成正则表达式<span class="ff3">....................................................................................................................................<span class="_"> </span>41</span></div><div class="t m0 xd h7 y30 ff3 fs5 fc0 sc0 ls0 ws0">Pattern<span class="_ _4"> </span><span class="ff2">和<span class="_ _4"> </span></span>Matcher<span class="_ _1"></span>..................................................................................................................................<span class="_ _a"></span>45</div><div class="t m0 xd ha y31 ff3 fs5 fc0 sc0 ls0 ws0">find().......................................................................................................................................................<span class="_ _5"> </span>46</div><div class="t m0 xd h7 y32 ff3 fs5 fc0 sc0 ls0 ws0">Pattern<span class="_ _4"> </span><span class="ff2">标志选项</span>....................................................................................................................................<span class="_ _5"> </span>46</div><div class="t m0 xd ha y33 ff3 fs5 fc0 sc0 ls0 ws0">split()<span class="_ _1"></span>.......................................................................................................................................................<span class="_ _7"></span>47</div><div class="t m0 xd h7 y34 ff2 fs5 fc0 sc0 ls0 ws0">替换操作<span class="ff3">................................................................................................................................................<span class="_"> </span>48</span></div><div class="t m0 xd h7 y35 ff2 fs5 fc0 sc0 ls0 ws0">正规表达式与<span class="_ _4"> </span><span class="ff3">JavaI/O...........................................................................................................................<span class="_ _9"> </span>50</span></div><div class="t m0 xd h7 y36 ff3 fs5 fc0 sc0 ls0 ws0">StringTokenizer<span class="_ _4"> </span><span class="ff2">还有用吗?<span class="_ _1"></span></span>.................................................................................................................<span class="_"> </span>51</div><div class="t m0 xe h9 y24 ff3 fs6 fc0 sc0 ls0 ws0">13-(2/52)</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/bg3.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java<span class="_ _0"> </span><span class="ff2">编程第<span class="_ _1"></span>十三<span class="_ _1"></span>讲<span class="_ _1"></span> <span class="_ _1"></span></span>IO<span class="_ _6"> </span><span class="ff2">系<span class="_ _1"></span>统</span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0">By Har<span class="_ _2"></span>ry Lee</div><div class="t m0 x3 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0">Web:<span class="_ _2"></span> <span class="fc1">http://www.effortech.net</span></div><div class="t m0 x4 h3 y1 ff3 fs1 fc0 sc0 ls0 ws0">Emai<span class="_ _2"></span>l:<span class="_ _2"></span> <span class="fc1">ji<span class="_ _2"></span>hs<span class="_ _2"></span>ian_<span class="_ _2"></span>lee<span class="_ _2"></span>@hot<span class="_ _2"></span>mail<span class="_ _2"></span>.com<span class="_ _2"></span><span class="fc0">; <span class="fc1">harry<span class="_ _2"></span>@ef<span class="_ _2"></span>fortech.ne<span class="_ _2"></span>t</span></span></span></div><div class="t m0 x5 h3 y4 ff3 fs1 fc0 sc0 ls0 ws0">phone: 136 0938 5098</div><div class="t m0 xb h5 y37 ff2 fs3 fc0 sc0 ls0 ws0">设<span class="_ _1"></span>计一<span class="_ _1"></span>个<span class="_ _1"></span>良<span class="_ _1"></span>好<span class="_ _1"></span>的输<span class="_ _1"></span>入<span class="_ _1"></span><span class="ff3">/<span class="_ _1"></span></span>输<span class="_ _1"></span>出<span class="_ _1"></span>系统<span class="_ _1"></span>是<span class="_ _1"></span>语<span class="_ _1"></span>言<span class="_ _1"></span>设<span class="_ _1"></span>计人<span class="_ _1"></span>员<span class="_ _1"></span>的<span class="_ _1"></span>最<span class="_ _1"></span>难<span class="_ _1"></span>的工<span class="_ _1"></span>作<span class="_ _1"></span>之<span class="_ _1"></span>一<span class="_ _1"></span>。<span class="_ _1"></span>最大<span class="_ _1"></span>的<span class="_ _1"></span>挑<span class="_ _1"></span>战<span class="_ _1"></span>在<span class="_ _1"></span>于必<span class="_ _1"></span>须<span class="_ _1"></span>考</div><div class="t m0 xb h5 y38 ff2 fs3 fc0 sc0 ls0 ws0">虑各种可性能。输入输出不仅有多种数据源和数据汇点,而且还要考虑与这些数据源、数据</div><div class="t m0 xb h5 y39 ff2 fs3 fc0 sc0 ls0 ws0">汇点的各种交流方式(比如顺序访问、随机访问、缓存方式、二进制、字符形式、按行存取,</div><div class="t m0 xb h5 y3a ff2 fs3 fc0 sc0 ls0 ws0">按单词存取等等)。</div><div class="t m0 xb h5 y3b ff3 fs3 fc0 sc0 ls0 ws0">Java<span class="_ _4"> </span><span class="ff2">类库设计人员通过很多类来完成这些功能,实际上<span class="_ _4"> </span></span>JavaI/O<span class="_ _5"> </span><span class="ff2">类库的类多得让人有些眼花。</span></div><div class="t m0 xb h5 y3c ff3 fs3 fc0 sc0 ls0 ws0">JavaI/O<span class="_ _5"> </span><span class="ff2">类<span class="_ _1"></span>库在<span class="_ _4"> </span></span>Java1.0<span class="_ _4"> </span><span class="ff2">之后<span class="_ _1"></span>也有很多改进,<span class="_ _1"></span>在<span class="_ _4"> </span></span>Java1.2.0<span class="_ _4"> </span><span class="ff2">中,<span class="_ _1"></span>在原先面向字节<span class="_ _1"></span>的类库的基础<span class="_ _1"></span>上,</span></div><div class="t m0 xb h5 y3d ff2 fs3 fc0 sc0 ls0 ws0">增<span class="_ _1"></span>加面<span class="_ _1"></span>向字<span class="_ _1"></span>符<span class="_ _1"></span>,以<span class="_ _6"> </span><span class="ff3">Unicode<span class="_ _4"> </span></span>为<span class="_ _1"></span>基<span class="_ _1"></span>础的<span class="_ _6"> </span><span class="ff3">I/O<span class="_ _4"> </span></span>类<span class="_ _1"></span>库。<span class="_ _1"></span>而<span class="_ _1"></span>在<span class="_ _4"> </span><span class="ff3">Java1.4<span class="_"> </span></span>又新<span class="_ _1"></span>增了<span class="_ _6"> </span><span class="ff3">nio<span class="_ _6"> </span></span>类库<span class="_ _1"></span>,<span class="_ _1"></span>主要<span class="_ _1"></span>目<span class="_ _1"></span>的是</div><div class="t m0 xb h5 y3e ff2 fs3 fc0 sc0 ls0 ws0">改进<span class="_ _4"> </span><span class="ff3">I/O<span class="_ _5"> </span></span>类库的性能和功能。</div><div class="t m0 xb h5 y3f ff2 fs3 fc0 sc0 ls0 ws0">由<span class="_ _1"></span>此,<span class="_ _1"></span>在真<span class="_ _1"></span>正<span class="_ _1"></span>了解<span class="_ _6"> </span><span class="ff3">JavaI/O<span class="_ _4"> </span></span>全<span class="_ _1"></span>貌,<span class="_ _1"></span>能<span class="_ _1"></span>够利<span class="_ _1"></span>用<span class="_ _1"></span>类库<span class="_ _1"></span>之<span class="_ _1"></span>前,<span class="_ _1"></span>我<span class="_ _1"></span>们必<span class="_ _1"></span>须<span class="_ _1"></span>掌握<span class="_ _1"></span>若<span class="_ _1"></span>干类<span class="_ _1"></span>的<span class="_ _1"></span>用法<span class="_ _1"></span>。<span class="_ _1"></span>同时<span class="_ _1"></span>,</div><div class="t m0 xb h5 y40 ff2 fs3 fc0 sc0 ls0 ws0">了解<span class="_ _4"> </span><span class="ff3">JavaI/O<span class="_ _5"> </span></span>的进化过程,对于真正地理解<span class="_ _4"> </span><span class="ff3">JavaI/O<span class="_ _4"> </span></span>类库也至关重要。</div><div class="t m0 xb h6 y41 ff4 fs4 fc0 sc0 ls0 ws0">1.<span class="_ _7"></span><span class="ff2">类<span class="_ _0"> </span></span>File</div><div class="t m0 xb h5 y42 ff2 fs3 fc0 sc0 ls0 ws0">类<span class="_ _4"> </span><span class="ff3">File<span class="_ _4"> </span></span>有一个令<span class="_ _1"></span>人迷惑的名称<span class="_ _1"></span>。我们首次看<span class="_ _1"></span>到它,以为与<span class="_ _1"></span>文件相关,实<span class="_ _1"></span>际上不是:它<span class="_ _1"></span>代表一</div><div class="t m0 xb h5 y43 ff2 fs3 fc0 sc0 ls0 ws0">个文件的名称或某个文件夹中一组文件的名称。当它代表一组文件时,我们通过其<span class="_ _4"> </span><span class="ff3">list()</span>方法,</div><div class="t m0 xb h5 y44 ff2 fs3 fc0 sc0 ls0 ws0">获得该组文件的清单。</div><div class="t m0 xb h2 y45 ff2 fs0 fc0 sc0 ls0 ws0">列出文<span class="_ _1"></span>件夹<span class="_ _1"></span>的文<span class="_ _1"></span>件清单</div><div class="t m0 xb h5 y46 ff2 fs3 fc0 sc0 ls0 ws0">当<span class="_ _4"> </span><span class="ff3">File<span class="_ _4"> </span></span>对象指向一个文件夹时,我们可以用两种方式列出其中的文件清单。当调用<span class="_ _4"> </span><span class="ff3">list()</span>方法</div><div class="t m0 xb hb y47 ff2 fs3 fc0 sc0 ls0 ws0">而不给它任<span class="ff5">何参</span>数时,我们获得该文件夹中<span class="ff5">所</span>有文件的清单。如<span class="ff5">果只想</span>列出其中一<span class="ff5">部分</span>文件,</div><div class="t m0 xb hb y48 ff2 fs3 fc0 sc0 ls0 ws0">比如<span class="ff5">只</span>列出<span class="ff5">扩展</span>名为<span class="ff3">.java<span class="_ _4"> </span></span>的文件,我们<span class="ff5">就</span>使用一个<span class="_ _4"> </span><span class="ff3">FilenameFilter<span class="_ _5"> </span></span>对象来过滤这个清单。</div><div class="t m0 xb hc y49 ff6 fs5 fc1 sc0 ls0 ws0">// Lec13: DirList.java</div><div class="t m0 xb hc y4a ff6 fs5 fc1 sc0 ls0 ws0">import java.io.*;</div><div class="t m0 xb hc y4b ff6 fs5 fc1 sc0 ls0 ws0">import java.util.*;</div><div class="t m0 xb hc y4c ff6 fs5 fc1 sc0 ls0 ws0">import java.util.regex.*;</div><div class="t m0 xb hc y4d ff6 fs5 fc1 sc0 ls0 ws0">public class DirList {</div><div class="t m0 xb hd y4e ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">public static void main(final String[] args){</span></div><div class="t m0 xb hd y4f ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">File path = new File(".");</span></div><div class="t m0 xb hd y50 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">String[] list;</span></div><div class="t m0 xb hd y51 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(args.length == 0)</span></div><div class="t m0 xb hd y52 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">list = path.list();</span></div><div class="t m0 xb hd y53 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">else</span></div><div class="t m0 xe h9 y24 ff3 fs6 fc0 sc0 ls0 ws0">13-(3/52)</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/bg4.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java<span class="_ _0"> </span><span class="ff2">编程第<span class="_ _1"></span>十三<span class="_ _1"></span>讲<span class="_ _1"></span> <span class="_ _1"></span></span>IO<span class="_ _6"> </span><span class="ff2">系<span class="_ _1"></span>统</span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0">By Har<span class="_ _2"></span>ry Lee</div><div class="t m0 x3 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0">Web:<span class="_ _2"></span> <span class="fc1">http://www.effortech.net</span></div><div class="t m0 x4 h3 y1 ff3 fs1 fc0 sc0 ls0 ws0">Emai<span class="_ _2"></span>l:<span class="_ _2"></span> <span class="fc1">ji<span class="_ _2"></span>hs<span class="_ _2"></span>ian_<span class="_ _2"></span>lee<span class="_ _2"></span>@hot<span class="_ _2"></span>mail<span class="_ _2"></span>.com<span class="_ _2"></span><span class="fc0">; <span class="fc1">harry<span class="_ _2"></span>@ef<span class="_ _2"></span>fortech.ne<span class="_ _2"></span>t</span></span></span></div><div class="t m0 x5 h3 y4 ff3 fs1 fc0 sc0 ls0 ws0">phone: 136 0938 5098</div><div class="t m0 xb hd y25 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">list = path.list(new FilenameFilter(){</span></div><div class="t m0 xb hd y54 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">private Pattern pattern = Pattern.compile(args[0]);</span></div><div class="t m0 xb hd y55 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">public boolean accept(File dir, String name){</span></div><div class="t m0 xb hd y56 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">return pattern.matcher( new File(name).getName() ).matches();</span></div><div class="t m0 xb hd y57 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y58 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">});</span></div><div class="t m0 xb hd y59 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">Arrays.sort(list, new Comparator(){</span></div><div class="t m0 xb hd y5a ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">public int compare(Object o1, Object o2){</span></div><div class="t m0 xb hd y5b ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">String s1 = (String)o1, s2 = (String)o2;</span></div><div class="t m0 xb hd y5c ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">return s1.toLowerCase().compareTo(s2.toLowerCase());</span></div><div class="t m0 xb hd y5d ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y5e ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">});</span></div><div class="t m0 xb hd y5f ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">for(int i=0; i<list.length; i++)</span></div><div class="t m0 xb hd y60 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println(list[i]);</span></div><div class="t m0 xb hd y61 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hc y62 ff6 fs5 fc1 sc0 ls0 ws0">}</div><div class="t m0 xb hb y63 ff3 fs3 fc0 sc0 ls0 ws0">FilenameFilter<span class="_ _4"> </span><span class="ff2">是一个<span class="ff5">非常简</span>单的接口:</span></div><div class="t m0 xb hc y64 ff6 fs5 fc1 sc0 ls0 ws0">public interface FilenameFilter {</div><div class="t m0 xb hd y65 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">boolean accept(File dir, String name);</span></div><div class="t m0 xb hc y66 ff6 fs5 fc1 sc0 ls0 ws0">}</div><div class="t m0 xb hb y67 ff2 fs3 fc0 sc0 ls0 ws0">其主要功能是<span class="_ _1"></span>定<span class="ff5">义<span class="_ _4"> </span><span class="ff3">accept()</span></span>方法。方法<span class="_ _4"> </span><span class="ff3">list<span class="_ _1"></span>()</span>通过<span class="ff5">回叫<span class="_ _4"> </span><span class="ff3">accept()</span></span>来<span class="ff5">决</span>定<span class="_ _1"></span><span class="ff5">哪</span>个文件名称<span class="_ _1"></span>应<span class="ff5">被包含</span>在</div><div class="t m0 xb hb y68 ff2 fs3 fc0 sc0 ls0 ws0">清单中。<span class="ff3">accept()</span>方法接<span class="ff5">受</span>两个<span class="ff5">参</span>数,第一个<span class="ff5">参</span>数是<span class="_ _5"> </span><span class="ff3">File<span class="_ _4"> </span></span>对象,表<span class="ff5">示</span>文件<span class="ff5">所</span>在的文件夹,第二</div><div class="t m0 xb hb y69 ff2 fs3 fc0 sc0 ls0 ws0">个<span class="ff5">参</span>数是一个<span class="_ _4"> </span><span class="ff3">String<span class="_ _4"> </span></span>对象,表<span class="ff5">示</span>文件的名称。</div><div class="t m0 xb hb y6a ff3 fs3 fc0 sc0 ls0 ws0">DirList<span class="_ _4"> </span><span class="ff2">中,</span>accept()<span class="ff2">方法利用一个正规表达<span class="_ _1"></span>式<span class="_ _4"> </span></span>Matcher<span class="_ _4"> </span><span class="ff2">对象来<span class="ff5">判<span class="_ _1"></span>断</span>这个正规表<span class="_ _1"></span>达式是<span class="ff5">否</span>与文<span class="_ _1"></span>件</span></div><div class="t m0 xb hb y6b ff2 fs3 fc0 sc0 ls0 ws0">名称相<span class="ff5">匹配</span>。<span class="ff3">File.getNam<span class="_ _2"></span>e()<span class="ff5">返回<span class="ff2">的是</span>去掉路径<span class="ff2">名称之后的文件名。</span></span></span></div><div class="t m0 xb h2 y6c ff2 fs0 fc0 sc0 ls0 ws0">检查文<span class="_ _1"></span>件夹<span class="_ _1"></span>,生<span class="_ _1"></span>成文件<span class="_ _1"></span>夹</div><div class="t m0 xb hb y6d ff2 fs3 fc0 sc0 ls0 ws0">我们也可以利<span class="_ _1"></span>用<span class="_ _4"> </span><span class="ff3">File<span class="_ _4"> </span></span>对象生成<span class="_ _1"></span>一个新的文件<span class="_ _1"></span>夹或<span class="ff5">整</span>个文件<span class="_ _1"></span>夹<span class="ff5">路径</span>。我们<span class="_ _1"></span>也可以查<span class="ff5">阅</span>文<span class="_ _1"></span>件的属</div><div class="t m0 xb hb y6e ff2 fs3 fc0 sc0 ls0 ws0">性(如大小,<span class="_ _1"></span>最后<span class="ff5">修</span>改时<span class="ff5">间<span class="_ _1"></span></span>,读<span class="ff5">写</span>性等)<span class="_ _1"></span>。也可以<span class="ff5">判断<span class="_ _1"></span></span>一个<span class="_ _4"> </span><span class="ff3">File<span class="_ _4"> </span></span>对象代表<span class="_ _1"></span>一个文件还是<span class="_ _1"></span>文件</div><div class="t m0 xb hb y6f ff2 fs3 fc0 sc0 ls0 ws0">夹。我们还可以用一个<span class="_ _4"> </span><span class="ff3">File<span class="_ _4"> </span></span>对象<span class="ff5">删除</span>一个文件。</div><div class="t m0 xb hc y70 ff6 fs5 fc1 sc0 ls0 ws0">// Lec13: MakeDirectories.java</div><div class="t m0 xb hc y71 ff6 fs5 fc1 sc0 ls0 ws0">import java.io.*;</div><div class="t m0 xb hc y72 ff6 fs5 fc1 sc0 ls0 ws0">import java.util.*;</div><div class="t m0 xb hc y22 ff6 fs5 fc1 sc0 ls0 ws0">public class MakeDirectories {</div><div class="t m0 xb hd y73 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">private static void usage(){</span></div><div class="t m0 xe h9 y24 ff3 fs6 fc0 sc0 ls0 ws0">13-(4/52)</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/625f50cd8cbeb85d574e5f54/bg5.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java<span class="_ _0"> </span><span class="ff2">编程第<span class="_ _1"></span>十三<span class="_ _1"></span>讲<span class="_ _1"></span> <span class="_ _1"></span></span>IO<span class="_ _6"> </span><span class="ff2">系<span class="_ _1"></span>统</span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0">By Har<span class="_ _2"></span>ry Lee</div><div class="t m0 x3 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0">Web:<span class="_ _2"></span> <span class="fc1">http://www.effortech.net</span></div><div class="t m0 x4 h3 y1 ff3 fs1 fc0 sc0 ls0 ws0">Emai<span class="_ _2"></span>l:<span class="_ _2"></span> <span class="fc1">ji<span class="_ _2"></span>hs<span class="_ _2"></span>ian_<span class="_ _2"></span>lee<span class="_ _2"></span>@hot<span class="_ _2"></span>mail<span class="_ _2"></span>.com<span class="_ _2"></span><span class="fc0">; <span class="fc1">harry<span class="_ _2"></span>@ef<span class="_ _2"></span>fortech.ne<span class="_ _2"></span>t</span></span></span></div><div class="t m0 x5 h3 y4 ff3 fs1 fc0 sc0 ls0 ws0">phone: 136 0938 5098</div><div class="t m0 xb hd y25 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println(</span></div><div class="t m0 xb hd y54 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="_ _b"> </span><span class="ff6">"Usage: MakeDirectories path1 ...\n" +</span></div><div class="t m0 xb hd y55 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="_ _b"> </span><span class="ff6">"Creates each path.\n" +</span></div><div class="t m0 xb hd y56 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="_ _b"> </span><span class="ff6">"Usage: MakeDirectories -d path1 ...\n" +</span></div><div class="t m0 xb hd y57 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="_ _b"> </span><span class="ff6">"Deletes each path.\n" +</span></div><div class="t m0 xb hd y58 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="_ _b"> </span><span class="ff6">"Usage: MakeDirectories -r path1 path2\n" +</span></div><div class="t m0 xf hc y74 ff6 fs5 fc1 sc0 ls0 ws0">"Renames from path1 to path2.");</div><div class="t m0 xb hd y75 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.exit(1);</span></div><div class="t m0 xb hd y76 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y77 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">private static void fileData(File f){</span></div><div class="t m0 xb hd y78 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println(</span></div><div class="t m0 x10 hc y79 ff6 fs5 fc1 sc0 ls0 ws0">"Absolute Path: " + f.getAbsolutePath() +</div><div class="t m0 x10 hc y7a ff6 fs5 fc1 sc0 ls0 ws0">"\n Can Read: " + f.canRead() +</div><div class="t m0 x10 hc y7b ff6 fs5 fc1 sc0 ls0 ws0">"\n Can write: " + f.canWrite() +</div><div class="t m0 x10 hc y7c ff6 fs5 fc1 sc0 ls0 ws0">"\n getName: " + f.getName() +</div><div class="t m0 x10 hc y7d ff6 fs5 fc1 sc0 ls0 ws0">"\n getParent: " + f.getParent() +</div><div class="t m0 x10 hc y7e ff6 fs5 fc1 sc0 ls0 ws0">"\n getPath: " + f.getPath() +</div><div class="t m0 x10 hc y7f ff6 fs5 fc1 sc0 ls0 ws0">"\n length: " + f.length() +</div><div class="t m0 x10 hc y80 ff6 fs5 fc1 sc0 ls0 ws0">"\n lastModified: " + new Date(f.lastModified()));</div><div class="t m0 xb hd y81 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y82 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">public static void main(String[] args){</span></div><div class="t m0 xb hd y83 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(args.length < 1) usage();</span></div><div class="t m0 xb hd y84 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(args[0].equals("-r")){</span></div><div class="t m0 xb hd y85 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(args.length != 3) usage();</span></div><div class="t m0 xb hd y86 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">File old = new File(args[1]), rname = new File(args[2]);</span></div><div class="t m0 xb hd y87 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println("Renaming..." + old + " to " + rname);</span></div><div class="t m0 xb hd y88 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(old.renameTo(rname))</span></div><div class="t m0 xb hd y89 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println("OK!");</span></div><div class="t m0 xb hd y8a ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">else</span></div><div class="t m0 xb hd y8b ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println("Failed!");</span></div><div class="t m0 xb hd y8c ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">fileData(old);</span></div><div class="t m0 xb hd y8d ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">fileData(rname);</span></div><div class="t m0 xb hd y8e ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">return;</span></div><div class="t m0 xb hd y8f ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y90 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">int count = 0;</span></div><div class="t m0 xb hd y91 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">boolean del = false;</span></div><div class="t m0 xb hd y92 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(args[0].equals("-d")){</span></div><div class="t m0 xb hd y93 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">count++;</span></div><div class="t m0 xb hd y94 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">del = true;</span></div><div class="t m0 xb hd y95 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">}</span></div><div class="t m0 xb hd y96 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">count--;</span></div><div class="t m0 xb hd y97 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">while(++count < args.length){</span></div><div class="t m0 xb hd y98 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">File f = new File(args[count]);</span></div><div class="t m0 xb hd y99 ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(f.exists()){</span></div><div class="t m0 xb hd y9a ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println(f + " exists");</span></div><div class="t m0 xb hd y9b ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">if(del){</span></div><div class="t m0 xb hd y9c ff7 fs5 fc1 sc0 ls0 ws0"> <span class="ff6">System.out.println("deleting..." + f );</span></div><div class="t m0 xe h9 y24 ff3 fs6 fc0 sc0 ls0 ws0">13-(5/52)</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>