2012-03-23 11 views
2

ディレクトリに置かれた多数のファイルを処理するアプリケーションで作業しています。自分のアプリケーションで処理される各ファイルの完全修飾パスをデータベースに挿入します。アプリケーションですでに処理されているファイルがユーザーの再処理のために再提出された場合は、ファイルの完全修飾パスを指定してファイルに対して処理されたすべてのデータをデータベースから削除してから、新しいファイルであるかのようにファイルを削除します。プラットフォーム固有のパスをJavaのデータベースに挿入する方法

私が直面しています問題は、私は日食を介してアプリケーションを実行すると、以下のように、データベースに挿入されたパス名であることである: -

私はそのパスとファイル名を連結のafer
D:\Trunk\App\Source 

(pathString + File.seperator + fileNameString)すなわち、

D:\Trunk\App\Source/file1.txt 

しかし、私は自分のアプリケーションのためのjarファイルを作成し、jarファイルをダブルクリックしてjarファイルを実行すると、以下のようにデータベースに挿入された完全修飾パスは、パス名データベースに挿入されたものは、安値: -

D:/Trunk/App/Source 

私は

D:/Trunk/App/Source/file1.txt 

アプリケーションを次のようにデータベースに挿入され、そのパス(pathString + File.seperator + fileNameString)つまり、完全修飾パスとファイル名が連結した後、 eclipseからアプリケーションを実行する代わりにjarをダブルクリックしてアプリケーションを実行すると、処理のために再送信されたファイルのデータを削除できません。削除するために使用されたクエリは関係なく、ただ、すべての"\"あなたが処理するすべてのファイルパスの"/"に、またはその逆の変換瓶

delete from file_table where where file = 'D:\Trunk\App\Source/file1.txt' 
+2

あなたはファイル区切りの1種類に固執カント?例えば。挿入中とデータベースを確認中に\/\をすべて変換する –

+0

これはうまくいく可能性があります。私のアプリケーションは、すべてのファイルの処理が完了したら.csvレポートを生成しますが。このレポートには、各ファイルのパスが列の1つに含まれています。これは、私が直面している2番目の問題、すなわち、レポートに表示されるパスがプラットフォーム固有の意味を持つようにすることです。 – CKing

答えて

1

パスをURIに変換してデータベースに格納します。その後、URIからファイルを再作成します。

String uriName = new File(path).toURI().toString()

String path = new File(new URI(uriName)).getAbsolutePath();

+0

これはWindows上の魅力のように動作するようです。 Linux上でLinuxパーティションをテストするには、コンピュータ上のLinuxパーティションに十分なスペースがありません。これはLinuxでもうまくいくのでしょうか?また、私はURIを使用するのではなく、直接file.getAbsolutePathを試しました。この方法でも動作するようです。 toURIメソッドとURIクラスは、file.getAbsolutePathを直接使用するのと比較してどのような利点がありますか? – CKing

+0

これはUNIXで動作します。代わりにFile.getCanonicalPath()を使用できます。 URIは(URLは推奨されていません)常に 'file:/ home/user/workspace/a.txt'を"/"で使用してください - " \ "に変換する必要はありません –

+0

私はセパレータとして/を使用しています。私はfile.getAbsolutePathを呼び出していますが、これはウィンドウ上でうまくいくようです。 file.getAbsolutePathをfile.getCanonicalPathに変更して、より安全な側にする必要がありますか? – CKing

2

日食からか、ダブルクリックしてアプリケーションを実行しているのと同じです。

+0

これは有効な解決策ですが、私はもっと一般的な解決方法を探しています私のアプリケーション全体を明示的に置換します。 – CKing

関連する問題