ファイルのコピー

 ↓で、できるかと思ったら、できなかった…orz
 File file.renameTo( File newPath );

 じゃ、InputStream で読み込んで、OutputStream で書き出して、読み込んで書き出して…
 と、ループしなきゃならないのか。
 それは面倒…。
 なんて思ってたら、FileChannel を使うとよいらしい。

 下記、例では、アプリのプリファレンスをSDへコピーしている。

	public void cpTo_sd( ) {
		
		File file = new File( Environment.getDataDirectory().getPath()+"/data/" 
				+ this.getPackageName()
				+"/shared_prefs/pref.xml" );

		File cpFile = new File( Environment.getExternalStorageDirectory().getPath()
				+"/pref.xml" );

		try{
			FileChannel channel_In = new FileInputStream( file ).getChannel();
			FileChannel channel_Out = new FileOutputStream( cpFile ).getChannel();

			channel_In.transferTo( 0, channel_In.size(), channel_Out );

			channel_In.close();
			channel_Out.close();

		}catch( Exception ex ){
			Log.d( "TEST", "->sd : copy error..." );
		}
		//--
	}

 FileChannel には、他にもlock や読み込み位置の指定などがあり、色々と使えそうである。
http://developer.android.com/reference/java/nio/channels/FileChannel.html

Posted in File, コピー. Tags: , , , . ファイルのコピー はコメントを受け付けていません。 »