package tomojavalib.util;

import java.io.*;
import java.util.*;


/**
* 指定ディレクトリ内のファイルやフォルダの一覧に関するclass<BR>
* @author to.totomo.net <BR>
* 履歴： <BR>
* 20090522 readDirクラスから移し再構成する <BR>
*/
public class Dir {
	
	/**
	 * このClassの動作確認用.
	 * 
	 */
	public static void main(String[] args) {
		String data[] = null;
		Dir t = new Dir();
		String dir = "D:\\work\\htdocs5\\zasou2\\zimg" ;
		System.out.println( "フォルダ " + dir + " 内のフォルダ一覧" );
		//ディレクトリ一覧表示
		data = t.readDirs( dir );
		/*
		for(int i=0 ; i < data.length ; i++ )
		 {
		  System.out.print( data[i]+ "  ");
		 }
		 */
		//ディレクトリ一覧表示（全表示）
		data = t.readDirsFull( dir );
		for(int i=0 ; i < data.length ; i++ )
		 {
		  System.out.println( data[i]+ "  ");
		 }
		//ファイル一覧表示
		System.out.println( "フォルダ " + dir + " 内のファイル一覧" );
		data = t.readFiles( dir );
		for(int i=0 ; i < data.length ; i++ )
		 {
		  System.out.print( data[i]+ "  ");
		 }		

		//実行フォルダの表示
		dir = t.userDir();
		System.out.println( "このプログラムの実行フォルダ :" + dir );		
		System.out.println( "フォルダ " + dir + " 内のファイル一覧" );
		data = t.readFiles( dir );
		for(int i=0 ; i < data.length ; i++ )
		 {
		  System.out.print( data[i]+ "  ");
		 }				
		
		//記入試験
		TextFile tf = new TextFile();
		try{
		tf.outOpen("test.txt");
		tf.write(dir);
		tf.outClose();
		}catch(Exception e){	System.out.println( "a" );};

		//名称変更試験
		t.fileReName("test.txt", "seikou.txt");
		
		}//end main

	/**
	 * ファイルの名前を変更します
	 * @param orgname 変更したいファイルの名前
	 * @param newname 変更後のファイル名
	 */
	public void fileReName( String orgname , String newname)
	{
	File orgfile = new File( orgname );
	orgfile.renameTo( new File(newname));
	}
	
	/**
	 * このプログラムが実行されているディレクトリを表示します
	 * @return
	 */
	public String userDir()
	{
	return System.getProperty( "user.dir" );	
	}
	
	
	/**
	 * 指定のファイルが最後に修正された日時を返します.
	 * yymmddhhmmss形式で返す。
	 */
	public String lastModified( String filename )
	{
		String lastmodified = null;
		File f = new File( filename );
		Jikoku j = new Jikoku();
		 Calendar c = Calendar.getInstance();
		 Date d = new Date( f.lastModified() );
		 c.setTime( d );
		 lastmodified = j.calendarToString1(c);
		return lastmodified;
	}
	
	/**
	 * 指定のファイルが最後に修正された日時を返します.
	 * yyyy/mm/dd mm:hh:ss形式で返す。
	 */
	public String lastModified2( String filename )
	{
		String lastmodified = null;
		File f = new File( filename );
		Jikoku j = new Jikoku();
		 Calendar c = Calendar.getInstance();
		 Date d = new Date( f.lastModified() );
		 c.setTime( d );
		 lastmodified = j.calendarToString3(c);
		return lastmodified;
	}
	
	
	
		/**
		* 指定したフォルダの直下にあるフォルダの一覧を返す<BR>
		* windows,Linuxに対応。Macは未対応
		*@return 指定フォルダ内にあるフォルダのリスト<BR>
		*@param 指定フォルダ<BR>
		*/    
		public String[] readDirs( String dirs)
		{
		String ls[] = null;	//この中にファイルリストが格納される
		Vector vtmp = new Vector();
		String dr = "\\" ;
		//OSの判別
		String osname;
		osname = System.getProperty( "os.name" );
		if(osname.indexOf( "Windows" )>=0){		  osname = "Windows" ;
		} else if(osname.indexOf( "Linux" )>=0){		  osname = "Linux" ;
		} else if(osname.indexOf( "Mac" )>=0){		  osname = "Mac" ;
		} else {		}
		if(osname.equals("Windows")){dr="\\" ;}
		if(osname.equals("Linux")){dr="/" ;}


		//指定フォルダの中身一覧を得る
		 try {
		   File dirtmp = new File( dirs );
		  ls = dirtmp.list();
		 } catch( Exception e ) {  System.err.println("Error");  return null; }

		 //フォルダか否かの確認
		for( int i=0; i<ls.length; i++ )
		{
		 try {
		  File dirtmp = new File( dirs+dr+ls[i] );
		  if( dirtmp.isDirectory()){
		   vtmp.addElement( ls[i] );
		  }
		 } catch( Exception e ) {System.err.println("Error");return null ;}
		}
		//ディレクトリ一覧を配列に入れる
		 String data[] = new String[ vtmp.size() ];
		 for(int i=0 ; i < vtmp.size() ; i++ )
		 {
		   data[i] = (String)vtmp.get(i);
		 }
		 return data;
		}

		
		
		
		/**
		* 指定したフォルダの直下にあるフォルダの一覧を返す(ドライブからの全表示)<BR>
		* windows,Linuxに対応。Macは未対応
		*@return 指定フォルダ内にあるフォルダのリスト(ドライブからの全表示)<BR>
		*@param 指定フォルダ<BR>
		*/    
		public String[] readDirsFull( String dirs)
		{
		String data[] = readDirs( dirs);
		
		//OSの判別
		String dr = "\\";
		String osname;
		osname = System.getProperty( "os.name" );
		if(osname.indexOf( "Windows" )>=0){		  osname = "Windows" ;
		} else if(osname.indexOf( "Linux" )>=0){		  osname = "Linux" ;
		} else if(osname.indexOf( "Mac" )>=0){		  osname = "Mac" ;
		} else {		}
		if(osname.equals("Windows")){dr = "\\" ;}
		if(osname.equals("Linux")){dr = "/" ;}
		
		 for(int i=0 ; i < data.length ; i++ )
		 {
		   data[i] = dirs + dr + data[i];
		 }		
		
		return data;
		}
		
		
		/**
		* 指定したフォルダの直下にあるファイルの一覧を返す<BR>
		* windows,Linuxに対応。Macは未対応
		*@return 指定フォルダ内にあるファイルのリスト<BR>
		*@param 指定フォルダ<BR>
		*/    
		public String[] readFiles( String dirs)
		{
		String ls[] = null;	//この中にファイルリストが格納される
		Vector vtmp = new Vector();
		String dr = "\\" ;
		//OSの判別
		String osname;
		osname = System.getProperty( "os.name" );
		if(osname.indexOf( "Windows" )>=0){		  osname = "Windows" ;
		} else if(osname.indexOf( "Linux" )>=0){		  osname = "Linux" ;
		} else if(osname.indexOf( "Mac" )>=0){		  osname = "Mac" ;
		} else {		}
		if(osname.equals("Windows")){dr="\\" ;}
		if(osname.equals("Linux")){dr="/" ;}


		//指定フォルダの中身一覧を得る
		 try {
		   File dirtmp = new File( dirs );
		  ls = dirtmp.list();
		 } catch( Exception e ) {  System.err.println("Error");  return null; }

		 //フォルダか否かの確認
		for( int i=0; i<ls.length; i++ )
		{
		 try {
		  File dirtmp = new File( dirs+dr+ls[i] );
		  if( dirtmp.isFile()){
		   vtmp.addElement( ls[i] );
		  }
		 } catch( Exception e ) {System.err.println("Error");return null ;}
		}
		//ディレクトリ一覧を配列に入れる
		 String data[] = new String[ vtmp.size() ];
		 for(int i=0 ; i < vtmp.size() ; i++ )
		 {
		   data[i] = (String)vtmp.get(i);
		 }
		 return data;
		}		

/**
 * 指定のホルダーを作成します
 * @param dir
 */
public void makeDir( String dir ){
File newdir = new File( dir );
newdir.mkdir();		
}

}
