4

提供された文字列に基づいてファイルを作成する必要があります。この例では、ファイル名を「My file w/ stuff.txt」とします。Javaがファイルを作成するとき

 File file = new File("My file w/ stuff.txt")

デフォルトの Windows 区切り記号は ですが、スラッシュがファイル区切り記号である'\'と想定しています。'/'したがって、将来の への呼び出しはfile.getName()を返し" stuff.txt"ます。これは私のプログラムに問題を引き起こします。

この動作を防ぐ方法はありますか?

4

4 に答える 4

6

このウィキペディアのページによると、Windows API は「/」を「\」と同等に扱います。そのため、(たとえば)Fileオブジェクトのパス名コンポーネントに何とか '/' を埋め込むことができたとしても、ある時点で Windows がそれをパス区切り文字として扱う可能性があります。

したがって、最良のオプションは次のとおりです。

  • Windows が「/」を通常どおりに処理できるようにします。つまり、文字をパス名の区切り記号として扱うようにします。
  • 上記と同様ですが、「/」についてユーザーに警告します。
  • '/' と '\' の文字をチェックし、ファイル名 (つまり、パス名の構成要素) にパス名の区切り文字を含めることはできないという理由で両方を拒否します。

(最善の方法は、アプリケーションの詳細に依存します。たとえば、偽のファイル名を入力した人に問題を報告できるかどうかなどです。)

「/」を「\」とは異なる方法で処理しようとすると、解決するよりも多くの問題が発生するリスクがあります。たとえば、アプリケーションをスクリプト化する必要がある場合。黙って一方または両方の文字を取り除く (またはそれらを別のものに変える) と、さらに問題が発生するリスクがあります。たとえば、予期しないパス名の衝突。

(最初はFile(URL)、% エスケープされた「/」文字を含む「file:」URL でコンストラクターを使用することを提案しました。しかし、それが Java 側で機能したとしても、Windows 側では機能しません。)

于 2011-01-30T22:25:38.020 に答える
0

さて、どうすればそれがフォルダセパレータになるのをやめることができますか?フォルダーセパレーターです。フォルダーセパレーターとは何かを自分で判断できれば、システム全体がクラッシュします。

于 2011-01-30T22:48:40.430 に答える
0

文字列が(外部ソースから)提供されている場合、その文字列に特定の文字が含まれないようにすることはできないようです。文字列を作成するためのある種の GUI がある場合は、いつでもそこで制限できます。それ以外の場合は、ファイルを作成する方法が何であれ、スラッシュをチェックして、エラーを返すか、必要に応じて処理する必要があります。

于 2011-01-30T22:17:49.350 に答える
0

Windows のファイル名にはスラッシュもバック スラッシュも使用できないため、ファイルの名前付けに使用される文字列からスラッシュを消去する必要があります。

于 2011-01-30T22:23:48.823 に答える