1

CSVファイルをアップロードする方法があります。通常のCSVファイルで作業するとうまくいきます。

問題は、ファイル拡張子として名前が変更されたファイル (PDF など) も読み取り、.csv例外をスローしない場合に発生します。

善意のCSV ファイルとファイル拡張子が付いた「偽の」CSV ファイルを区別するのを手伝ってくれる人はい.csvますか?


次のコメントを更新します。

これが私のコードです:

CsvReader csvReader = new CsvReader();
ArrayList <ArrayList<String>> arrData=null;
String path="C:/Users/Avinash/Desktop/asset.csv";
arrData=CsvReader.readCsv(path,printinconsole);

asset.csvが実際の CSV ファイルである場合、上記のコードは正常に機能します。ただし、他の形式のファイル (たとえばasset.pdf) の名前は に変更されasset.csv、例外はスローされず、ジャンク値が読み取られます。

これら 2 つの異なるファイル タイプを区別するのに役立つ人はいますか?

jMimeMagicを試しましたが、Open Office からすべてのスプレッドシートの正しい MIME タイプを取得できません。

4

2 に答える 2

4

善意の CSV ファイルと .csv ファイル拡張子を持つ「偽の」CSV ファイルを区別する方法は?

各ファイルは CSV ファイル (改行で区切られたレコード、カンマで区切られたフィールド) として解釈できるため、これを単純な方法で行うことはできません。そのため、一部の文字セットを使用するバイナリ ファイルでさえ、「有効な」CSV として読み取ることができます。ファイル)。たとえば、ファイルに改行文字やカンマ文字が含まれていない場合、ファイル全体を含む単一レコード/単一フィールドの結果が得られます。

それが有効な CVS ファイルであるかどうかを確認するために (ユース ケースに対して)、特定のデータが満たされる必要があることがわかっているいくつかの制約を使用して、CSV ファイルから読み取られた結果を検証する必要があります。たとえば、次のことができます。

  • ヘッダー/タイトルの値を検証する
  • 各レコードで予想されるフィールド数を検証する
  • 最大/最小フィールド長とレコード長を検証する
  • 文字セットを検証します - データに無効な文字が含まれていますか?
  • フィールド データが特定の範囲内にあるかどうかを検証する

ところで: 悪意のあるデータがアプリケーションにインポートされるのを避けるために、とにかくこれらの検証を行う必要があります。

于 2013-03-20T08:12:50.693 に答える
0

多くのファイル形式には、タイプ シグネチャとして使用される短いバイト シーケンスである特別なヘッダーがあります。これは、特定のファイル拡張子を必要とせずに、Linux が画像からテキスト ファイルを識別する方法です。

Java では、 のユーティリティ クラスを使用できますjavax.activation。完全な例をここに示します。

テキスト ファイルが text/csv (またはおそらく text/plain) として識別される場合は、そのように解析することができます。

于 2013-03-20T08:12:06.020 に答える