JavaはIOストリームを使用して、大きなファイルのセグメンテーションとマージを実現します
ファイルセグメンテーションは、より実用的な機能である必要があります。たとえば、あるコンピューターから別のコンピューターにコピーする必要がある3Gファイルがあるが、ストレージデバイス(SDカードなど)が1gしかない場合。この時点で、ファイルを3つの1Gファイルにカットし、個別にコピーし、最後に問題を解決する3つのファイルをマージできます。たとえば、FTPにアップロードするために数百mのファイルがありますが、このFTPは単一のファイルを10mを超えないように制限します。現時点では、ファイルセグメンテーションを使用して問題を解決することもできます。分割されているため、再度使用するときにマージする必要があります。今日は、ファイルの分割とJavaコードを介してマージする機能を実装します。
次に、マシンからファイルをデモンストレーションしてデモを行います。ファイルディレクトリは次のとおりです。E:/eclipse-jee-juno-win32.zip(今日は誰もが嫌いな日食を楽しんでいます):
次の図は、セグメンテーション前の状況を示しています。
分割後の状況は次のとおりです。
Javaでファイルを分割する方法:
//ファイル分割のメソッド(ファイルパスを分割するパスを渡し、メソッドに分割するコピーの数を渡す)プライベートvoid splitfiledemo(ファイルsrc、int m){if(src.isfile()){//ファイルの合計長さを取得しますl = src.length(); //ファイル名を取得しますstring string filename = src.getName()。substring(0、src.getName()。indexof( "。")); //ファイルの接尾辞文字列endname = src.getname()。substring(src.getname()。lastindexof( "。"))を取得します。 System.out.println(endname); inputstream in = null; try {in = new FileInputStream(src); for(int i = 1; i <= m; i ++){stringbuffer sb = new StringBuffer(); sb.append(src.getparent())。append(filename).append( "_ data")。append(i).append(endname); system.out.println(sb.toString()); file file2 = new file(sb.toString()); //ファイルを書き込むための出力ストリームを作成しますoutputStream out = new fileoutputStream(file2); int len = -1; byte [] bytes = new byte [10*1024*1024]; while((len = in.read(bytes))!= -1){out.write(bytes、0、len); if(file2.length()>(l / m)){break; }} out.close(); }} catch(例外e){e.printstacktrace(); }最後に{try {in.close(); } catch(ioexception e){e.printstacktrace(); }}}} Javaマージファイル:
//ファイルマージのメソッド(マージするファイルパスのパス)プライベート静的void joinfiledemo(string ... src){for(int i = 0; i <src.length; i ++){file file = new file(src [i]); string filename = file.getName()。substring(0、file.getName()。indexof( "_")); string endname = file.getName()。substring(file.getName()。lastIndexof( "。")); stringbuffer sb = new StringBuffer(); sb.append(file.getParent())。append( "//")。append(filename).append(endname); system.out.println(sb.toString()); try {//小さなファイルの入力ストリームを読み取りますinputstream in = new fileinputStream(file); //大きなファイルの出力ストリームを書き込みますfile2 = new file(sb.toString()); outputStream out = new fileoutputStream(file2、true); int len = -1; byte [] bytes = new byte [10*1024*1024]; while((len = in.read(bytes))!= -1){out.write(bytes、0、len); } out.close(); in.close(); } catch(Exception e){e.printstacktrace(); }} system.out.println( "ファイルマージが完了!");}書く前は非常に複雑だと思っていましたが、書いた後、まさにそれだと思いました。あなたはあなたのスキルを練習することができます。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!