<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 41,  comments - 40,  trackbacks - 0

    剛剛寫的看誰復制的快,只是由于在項目中猶豫到底是用哪個好而寫的,沒想到大家很感興趣,那我再把讀取文件誰快也翻上來,有錯盡管拍磚。

    另外,最好能放在有上萬張10KB以上的圖片的文件夾下運行,否則不一定看出效果,我的是六千多張,10240輕松取勝。

    import java.io.File;
    import java.io.IOException;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;


    /*******************************************************************************
    ?*
    ?*
    ?* Author: NeedJava
    ?*
    ?* Modified: 2007.08.26
    ?*
    ?******************************************************************************/
    public final class ReadFaster
    {
    ? /*****************************************************************************
    ?? *
    ?? * 構造函數,默認使用當前路徑
    ?? *
    ?? ****************************************************************************/
    ? public ReadFaster()
    ? {
    ??? this( "." );
    ? }

    ? public ReadFaster( String fileName )
    ? {
    ??? this.listPictures( null, fileName );
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 列出當前目錄下的文件列表,包括文件和文件夾
    ?? *
    ?? ****************************************************************************/
    ? private final void listPictures( File path, String fileName )
    ? {
    ??? File file=new File( path, fileName );

    ??? if( file.isDirectory() )
    ????? {
    ??????? //得到當前目錄下的文件列表,包括文件和文件夾
    ??????? String[] children=file.list();

    ??????? //如果子集為空,就放棄后面的操作
    ??????? if( children==null )
    ????????? {
    ??????????? return;
    ????????? }

    ??????? //排序
    ??????? //java.util.Arrays.sort( children );

    ??????? //如果子集不為空,則顯示
    ??????? for( int i=0; i<children.length; i++ )
    ?????????? {
    ???????????? listPictures( file, children[i] );
    ?????????? }
    ????? }
    ??? else if( file.isFile() )
    ?????????? {
    ???????????? if( isPictureSuffix( file.getPath() ) )
    ?????????????? {
    ???????????????? readPicture( file );
    ?????????????? }
    ?????????? }
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 根據后綴名判斷是否是有效的圖片,并且返回小寫的后綴名
    ?? *
    ?? ****************************************************************************/
    ? private final boolean isPictureSuffix( String fileName )
    ? {
    ??? if( fileName==null )
    ????? {
    ??????? return false;
    ????? }

    ??? int length=fileName.length();

    ??? //可能存在“.jpg”這樣的文件,即4個字符
    ??? if( length>=4 )
    ????? {
    ??????? char c=fileName.charAt( length-4 );

    ??????? if( c=='.' )
    ????????? {
    ??????????? c=fileName.charAt( length-3 );

    ??????????? if( c=='j'||c=='J' )
    ????????????? {
    ??????????????? c=fileName.charAt( length-2 );

    ??????????????? if( c=='p'||c=='P' )
    ????????????????? {
    ??????????????????? c=fileName.charAt( length-1 );

    ??????????????????? if( c=='g'||c=='G' )
    ????????????????????? {
    ??????????????????????? return true;
    ????????????????????? }
    ??????????????????? else if( c=='e'||c=='E' )
    ?????????????????????????? {
    ???????????????????????????? return true;
    ?????????????????????????? }
    ????????????????? }
    ????????????? }
    ??????????? else if( c=='t'||c=='T' )
    ?????????????????? {
    ???????????????????? c=fileName.charAt( length-2 );

    ???????????????????? if( c=='i'||c=='I' )
    ?????????????????????? {
    ???????????????????????? c=fileName.charAt( length-1 );

    ???????????????????????? if( c=='f'||c=='F' )
    ?????????????????????????? {
    ???????????????????????????? return true;
    ?????????????????????????? }
    ?????????????????????? }
    ?????????????????? }
    ????????? }
    ??????? else if( c=='j'||c=='J' )
    ?????????????? {
    ???????????????? c=fileName.charAt( length-3 );

    ???????????????? if( c=='p'||c=='P' )
    ?????????????????? {
    ???????????????????? c=fileName.charAt( length-2 );

    ???????????????????? if( c=='e'||c=='E' )
    ?????????????????????? {
    ???????????????????????? c=fileName.charAt( length-1 );

    ???????????????????????? if( c=='g'||c=='G' )
    ?????????????????????????? {
    ???????????????????????????? return true;
    ?????????????????????????? }
    ?????????????????????? }
    ?????????????????? }
    ???????????????? else if( c=='f'||c=='F' )
    ??????????????????????? {
    ????????????????????????? c=fileName.charAt( length-2 );

    ????????????????????????? if( c=='i'||c=='I' )
    ??????????????????????????? {
    ????????????????????????????? c=fileName.charAt( length-1 );

    ????????????????????????????? if( c=='f'||c=='F' )
    ??????????????????????????????? {
    ????????????????????????????????? return true;
    ??????????????????????????????? }
    ??????????????????????????? }
    ??????????????????????? }
    ?????????????? }
    ??????? else if( c=='t'||c=='T' )
    ?????????????? {
    ???????????????? c=fileName.charAt( length-3 );

    ???????????????? if( c=='i'||c=='I' )
    ?????????????????? {
    ???????????????????? c=fileName.charAt( length-2 );

    ???????????????????? if( c=='f'||c=='F' )
    ?????????????????????? {
    ???????????????????????? c=fileName.charAt( length-1 );

    ???????????????????????? if( c=='f'||c=='F' )
    ?????????????????????????? {
    ???????????????????????????? return true;
    ?????????????????????????? }
    ?????????????????????? }
    ?????????????????? }

    ?????????????? }
    ????? }

    ??? return false;
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 大于10240的,每次讀1024或2048
    ?? *
    ?? * 小于10240的,讀10240一次即可
    ?? *
    ?? ****************************************************************************/
    ? private final String readPicture( File file )
    ? {
    ??? try{ FileInputStream fis=new FileInputStream( file );

    ???????? //小于10K的忽略
    ???????? if( fis.available()<10240 )
    ?????????? {
    ???????????? return "";
    ?????????? }

    ???????? long num=0L;

    ???????? //Buffered的默認有2048和8192

    ???????? //*/ No.1
    ???????? byte[] buffer=new byte[10240];

    ???????? if( fis.read( buffer )==10240 )
    ?????????? {
    ???????????? for( int i=0; i<10240; i++ )
    ??????????????? {
    ????????????????? num++;
    ??????????????? }
    ?????????? }
    ???????? //*/

    ???????? /*/ No.3
    ???????? byte[] buffer=new byte[5120];

    ???????? for( int j=0; j<2; j++ )
    ??????????? {
    ????????????? if( fis.read( buffer )==5120 )
    ??????????????? {
    ????????????????? for( int i=0; i<5120; i++ )
    ???????????????????? {
    ?????????????????????? num++;
    ???????????????????? }
    ??????????????? }
    ??????????? }
    ???????? //*/

    ???????? /*/ No.2
    ???????? byte[] buffer=new byte[2048];

    ???????? for( int j=0; j<5; j++ )
    ??????????? {
    ????????????? if( fis.read( buffer )==2048 )
    ??????????????? {
    ????????????????? for( int i=0; i<2048; i++ )
    ???????????????????? {
    ?????????????????????? num++;
    ???????????????????? }
    ??????????????? }
    ??????????? }
    ???????? //*/

    ???????? /*/ No.4
    ???????? byte[] buffer=new byte[1024];

    ???????? for( int j=0; j<10; j++ )
    ??????????? {
    ????????????? if( fis.read( buffer )==1024 )
    ??????????????? {
    ????????????????? for( int i=0; i<1024; i++ )
    ???????????????????? {
    ?????????????????????? num++;
    ???????????????????? }
    ??????????????? }
    ??????????? }
    ???????? //*/

    ???????? fis.close();
    ?????? }
    ???? catch( FileNotFoundException fnfe )
    ????????? {
    ??????????? fnfe.printStackTrace();
    ????????? }
    ???? catch( IOException ioe )
    ????????? {
    ??????????? ioe.printStackTrace();
    ????????? }
    ???? catch( Exception e )
    ????????? {
    ??????????? e.printStackTrace();
    ????????? }

    ???? return "";
    ? }


    ? /*****************************************************************************
    ?? *
    ?? * 主函數入口
    ?? *
    ?? ****************************************************************************/
    ? public static void main( String[] args )
    ? {
    ??? try{ long begin=System.currentTimeMillis();

    ???????? ReadFaster rf=new ReadFaster();

    ???????? System.out.println( "總共耗時:"+( System.currentTimeMillis()-begin )+"毫秒\r\n" );
    ?????? }
    ??? catch( Exception e )
    ???????? {
    ?????????? e.printStackTrace();
    ???????? }
    ? }
    }

    posted on 2007-09-17 01:02 NeedJava 閱讀(873) 評論(1)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 羞羞视频在线观看免费| 免费萌白酱国产一区二区三区| 国产片免费福利片永久| www在线观看免费视频| 亚洲五月六月丁香激情| 国产免费资源高清小视频在线观看| 一区二区在线视频免费观看| 亚洲欧洲一区二区| 免费午夜爽爽爽WWW视频十八禁 | 亚洲婷婷天堂在线综合| 免费在线视频一区| 67pao强力打造国产免费| 日韩久久无码免费毛片软件| 亚洲经典在线中文字幕| 亚洲一级Av无码毛片久久精品| 巨波霸乳在线永久免费视频 | 免费看又黄又无码的网站| 亚洲国产成人手机在线观看| 亚洲AV无码专区电影在线观看 | 久久爰www免费人成| 立即播放免费毛片一级| 亚洲精品在线播放视频| 久久精品国产精品亚洲下载| 24小时免费直播在线观看| 久久青草精品38国产免费| 一级毛片免费视频网站| 中文日韩亚洲欧美制服| 久久亚洲精品成人av无码网站| 亚洲电影日韩精品| 在线精品免费视频无码的| 51视频精品全部免费最新| 在线看片免费人成视频久网下载| 亚洲成在人线在线播放无码| 久久亚洲AV成人无码软件 | 小说专区亚洲春色校园| 亚洲另类精品xxxx人妖| 亚洲av色福利天堂| 国产亚洲精品国产| 亚洲最大av无码网址| 四虎亚洲国产成人久久精品| 97无码免费人妻超级碰碰碰碰|