サーバ側とクライアント側の2つのファイル保存フォルダの中を比較して、クライアント側に不足しているファイルをサーバからダウンロードするというプログラムを作成しています。
現時点では、両方のフォルダのパスを指定して、FileクラスのlistFilesによってフォルダ内の一覧情報を取得し、それぞれのフォルダ内のファイル名を比較して一致しない場合はそれをダウンロードするという方法で不足しているファイルを取得することができています。
しかし、ファイル内容が異なっているのにファイル名が同じであるときにそれをダウンロードできないという問題がでてきて困っています。もしファイル内容まで一致しているかどうか比較できる方法があったら教えてほしいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
中身の丸々の比較は時間もかかるので、サイズと更新日の比較では如何でしょう?
File local;
File server;
if (( local.length() != server.length() )
|| ( local.lastModified() != server.lastModified() )) {
違う
}
else {
同じ
}
但し、ファイル管理情報をパッチして、タイムスタンプを偽装されたら判断できません。
しかし、通常業務範囲ではそこまで悪意のある事態を想定しなくても良いのでは?
お返事どうもありがとうございます。
サイズと更新日の比較は全然思いつきませんでした。
とても手軽に比較できそうで参考になります。
試作なので偽装とかそこまでは考えなくても大丈夫です。
プログラム例まで載せていただきありがとうございました。
またよろしくお願いします。
No.1
- 回答日時:
java.io.FileInputStreamクラスのオブジェクトを生成し、
比較元と比較先のファイルの内容をそれぞれbyte[]配列に取り、
それをjava.util.Arrays.equalsメソッドで比較するという方法はいかがでしょうか。
byte列同士の比較になるので、内容が完全に一致していなければ異なるファイルであると判定できると思います。
<例>
import java.io.*;
import java.util.*;
public class Sample {
public static void main(String[] args) {
try
{
File file1 = new File("比較元ファイルのpath");
File file2 = new File("比較先ファイルのpath");
byte[] b1 = new byte[(int)file1.length()];
byte[] b2 = new byte[(int)file2.length()];
new FileInputStream(file1).read(b1);
new FileInputStream(file2).read(b2);
System.out.println("Arrays.equals(b1, b2) => " + Arrays.equals(b1, b2));
}catch(FileNotFoundException e){
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}catch(Exception e){
System.out.println(e);
}
}
}
※ただし、この方法は一旦配列に取得するという関係上、2,147,483,647byteより大きいサイズのファイルが来た時、正しく動作しません。
お返事ありがとうございます。
自分が求めていた方法でした。
プログラム例まで載せていただきとても参考に
なります。
試作なのでファイルなどの軽いもので実行するので
サイズは大丈夫だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- 電子書籍 ファイルピックについて 1 2022/08/07 00:07
- Excel(エクセル) エクセルのファイルにリンクを貼る方法 4 2023/06/30 11:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Android(アンドロイド) Aloha Browser でダウンロードしたファイルをPCに転送するには? 1 2022/05/23 18:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0バイトのテキストファイル
-
Perlで2GBを超える大きいファイ...
-
Eclipseで検索ができなくなった
-
【Excel VBA】取り込んだファイ...
-
HTMLテキストリンクでExcelファ...
-
JavaでPDFファイルに変換するに...
-
VBAで、JPG写真の撮影日時を読...
-
CSV名と同じシートを選択して取...
-
C++によるファイル送受信プログ...
-
RPGでメッセージファイル利用
-
ファイル更新日取得
-
ファイルの排他について
-
ファイル作成日時と更新日時を...
-
PHPからベーシック認証のかかっ...
-
C#で文字列リソースを扱う
-
msgget()で指定するkey値について
-
ファイル内容を比較する方法
-
VB2008 iniファイルの全セクシ...
-
[transformNode]メソッドについて
-
VSSでチェックアウトの取消をし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで検索ができなくなった
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
HTMLテキストリンクでExcelファ...
-
サイトマップにサブドメインを...
-
Javaのファイルダウンロードに...
-
ディレクトリのサイズの取得
-
main関数のコマンドライン引数...
-
2GB以上のファイルを扱う方法
-
VBAで、JPG写真の撮影日時を読...
-
msgget()で指定するkey値について
-
リソースファイルを認識してく...
-
includeで別サイトを読み込む
-
ファイル更新日取得
-
VB6.0のメモリリークについて
-
ファイル作成日時と更新日時を...
-
ファイルの排他について
-
vbaの構文の修正相談(xmlファ...
-
HTMLまたはJavaScriptでフ...
-
【VBA】印刷マクロのループ処理...
おすすめ情報