1。基本的な目的
Javaを使用して、次の操作を完了します。
たとえば、1つのフォルダー内のすべてのファイルを別のフォルダーにコピーします。たとえば、ディスクFには2つのフォルダーAとBがあります。
f:/aにはたくさんのファイルがあります。 Javaプログラムを実行した後、それらはすべてf:/bにコピーされ、名前が変更されます。すべてのファイルの前にrename_のプレフィックスを追加します。内部にフォルダーがある場合、フォルダーは名前が変更されません。内部のファイルは名前が変更され、すべてのファイルの前にrename_のプレフィックスが変更されます。
2。生産プロセス
1。まず、主な関数は非常に単純です。これは、上記のFiletestクラスのコピーフォルダー関数を呼び出すことです。
public class filecopy {public static void main(string args []){new filetest()。copyFolder( "f:/a"、 "f:/b"); }}Javaでは、f:/aには問題がなく、f:/aも問題ありませんが、文字列を表現するときに転送する必要があることは注目に値します。
2。プログラム全体の鍵は、Filetestクラスのコピーフォルダー関数です。この関数はこのクラスで-_-です!また、java.io.*はプログラムの開始時に導入されていることに注意してください。入力および出力ストリームが使用されるため
class filetest {public void copyfolder(string oldpath、string newpath){//フォルダーが存在しない場合は、新しいフォルダー(new file(newpath))を作成します。mkdirs(); //フォルダー全体の内容をファイル文字列アレイに読み取り、下にカーソルIを設定し、下向きに移動して配列ファイルfileList = newファイル(OldPath)の読み取りを開始します。 string [] file = fileList.list(); //この温度は単なる一時的なファイルポインターであることに注意してください//プログラム全体が一時ファイルのtemp = nullを作成しません。 for(int i = 0; i <file.length; i ++){// oldpathがパスセパレーター/または/で終了した場合、oldpath/file nameが正常である場合、それ以外の場合は、oldpathの後にパスセパレーターを追加し、渡されたパラメーターがf:/aまたはf:/a/? if(oldpath.endswith(file.separator)){temp = new file(oldpath + file [i]); } else {temp = new file(oldpath + file.separator + file [i]); } //カーソルがファイルを遭遇する場合if(temp.isfile()){fileinputStream input = new fileInputStream(temp); fileoutputStream output = new fileoutputStream(newPath + "/" + "rename_" +(temp.getName())。toString()); byte [] bufferArray = new byte [1024 * 64]; int prereadlength; while((prereadlength = input.read(bufferArray))!= -1){output.write(bufferArray、0、prereadlength); } output.flush(); output.close(); input.close(); } //カーソルがフォルダーに遭遇する場合if(temp.isdirectory()){copyfolder(oldpath + "/" + file [i]、newpath + "/" + file [i]); }}} catch(Exception e){system.out.println( "フォルダーコンテンツ全体をコピーする際のエラー"); }}}カーソルがファイルに遭遇したときに理解するのは少し難しいかもしれません。実際、それはこのようなものです。最初に、ファイル入力ストリームを設定し、カーソルで遭遇したファイルから入力を指定し、NewPath/rename_oldファイル名のファイルディレクトリへの出力を指定します。その後、バッファアレイを設定します。ファイル入力ストリームの場合、読みたいファイルの場合、読み取りメソッドを呼び出すたびに、バッファアレイバッファーアレイのコンテンツのコンテンツを読み取り位置に読み続け、読み取りコンテンツをバッファーアレイに保存し、バッファーアレイの前にすべてのコンテンツを上書きし、ファイル出力ストリームがファイルアレイを入力するまでのすべてのコンテンツを出力します。
ファイル入力ストリームがこのように整理できる理由については、ファイルが読み取られる場合、Javaカプセル化されたFileInputStream.ReadメソッドもオペレーティングシステムAPIを呼び出してこれらのデータを順番に読み取るため、最後の読み取りの場所に後方に読み続けます。ファイルデータを読み取るときは、順番に並んでいる必要があります。最初に最初のバイトを読むことは不可能であり、次に2番目のバイトから最後のバイトを読むことは不可能です。ループを読み取ると、読み取りメソッドが位置++を読み取り、各読み取りがファイルの最後に遭遇するまで次のバイトを順番に読み取ります。
カーソルがフォルダーに遭遇したら、もう一度電話して同じ操作を完了します。これは反復と呼ばれます。
3.したがって、手順全体は次のとおりです。
java.io.*をインポートします。 / **** @param oldpathコピーするディレクトリ* @param newpathコピーされるディレクトリ**/ class filetest {public boid copyfolder(string oldpath、string newpath){//フォルダーが存在しない場合は、新しいフォルダー(新しいファイル(newpath))。 //フォルダー全体の内容をファイル文字列アレイに読み取り、下にカーソルIを設定し、絶えず下に移動して、この配列ファイルfileList = newファイル(oldpath)を読み始めます。 string [] file = fileList.list(); //この温度は単なる一時的なファイルポインターであることに注意してください//プログラム全体が一時ファイルのtemp = nullを作成しません。 for(int i = 0; i <file.length; i ++){// oldpathがパスセパレーター/または/で終了した場合、oldpath/file nameが正常である場合、それ以外の場合は、oldpathの後にパスセパレーターを追加し、渡されたパラメーターがf:/aまたはf:/a/? if(oldpath.endswith(file.separator)){temp = new file(oldpath + file [i]); } else {temp = new file(oldpath + file.separator + file [i]); } //カーソルがファイルを遭遇する場合if(temp.isfile()){fileinputStream input = new fileInputStream(temp); fileoutputStream output = new fileoutputStream(newPath + "/" + "rename_" +(temp.getName())。toString()); byte [] bufferArray = new byte [1024 * 64]; int prereadlength; while((prereadlength = input.read(bufferArray))!= -1){output.write(bufferArray、0、prereadlength); } output.flush(); output.close(); input.close(); } //カーソルがフォルダーに遭遇する場合if(temp.isdirectory()){copyfolder(oldpath + "/" + file [i]、newpath + "/" + file [i]); }}} catch(Exception e){system.out.println( "フォルダーコンテンツ全体をコピーする際のエラー"); }}} public class filecopy {public static void main(string args []){new filetest()。copyfolder( "f:/a"、 "f:/b"); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。