1

ファイルが存在するかどうかを確認する必要があります。これは方法によって達成できますFile#exists()。ただし、この存在チェックでは大文字と小文字が区別されます。つまり、コードにファイル名 some_image_file.jpg がある場合、物理的にファイルが some_image_file.JPG である場合、このメソッドはファイルが存在しないことを示します。拡張子の大文字と小文字を区別せずにファイルの存在を確認し、実際のファイル名を取得するにはどうすればよいですか?

私のシナリオでは、Excel ファイルがあります。各行には、ファイルとファイル名のメタデータが含まれています。場合によっては、ファイル名しかない場合もあれば、フル パスを使用できる場合もあります。行をドキュメントとして示しています。

これらのファイルはサーバーに配置されます。私の仕事は

  • Excel ファイルを 1 行ずつ読み、すべてのドキュメントを一覧表示します。
  • ファイル名またはファイルパスを取り出します。
  • ファイルのフル パスを作成します。
  • ファイルが存在するかどうかを確認します。
  • ドキュメントで提供されているその他のメタデータ/情報を検証します。
  • ファイルをアップロードします。

ファイルが存在しない場合、または一部のメタデータが無効な場合、アプリケーションは例外をスローします。

Excel ファイルはお客様が作成したもので、一部のファイル名が間違っています。つまり、ファイルの拡張子が物理的に小文字である場合、拡張子は大文字で書かれており、その逆も当てはまります。

UNIXサーバーでアプリケーションを実行しています。

ファイル拡張子が一致していないため、File#exists()false が返され、最終的にコードが例外をスローしています。

ファイルが配置されるフォルダーには、30000 以上のファイルを含めることができます。

私が欲しいのは

  • ファイルのフル パスを取得します。
  • ファイルが存在するかどうかを確認します。
  • 存在しない場合
  • 拡張子の大文字と小文字を変換してファイルの存在を確認します。
  • ケース変換後に存在しない場合は、例外をスローします。
  • 存在する場合は、実際のファイル名またはファイル パスを返します。

ファイル名に.Jpgのようなファイル拡張子が付いている場合、どうすればよいかわかりません! 大文字と小文字を変えて並べ替えて確認する必要がありますか?

4

3 に答える 3

2

フォルダ内のファイル名を取得できます

File.list() 

を使用して名前を確認します

equalsIgnoreCase()

またはhttp://commons.apache.org/io/ を試して使用してください

FileNameUtils.directoryContains(final String canonicalParent, final String canonicalChild)
于 2012-11-29T07:12:14.337 に答える
0

このようにして私は問題を解決しました:

public String getActualFilePath() {
    File givenFile = new File(filePath);
    File directory = givenFile.getParentFile();

    if(directory == null || !directory.isDirectory()) {
        return filePath;
    }


    File[] files = directory.listFiles();
    Map<String, String> fileMap = new HashMap<String, String>();

    for(File file : files) {                        
        if(file.isDirectory()){
            continue;
        }

        String absolutePath = file.getAbsolutePath();
        fileMap.put(absolutePath, StringUtils.upperCase(absolutePath));
    }

    int noOfOcc = 0;
    String actualFilePath = "";

    for(Entry<String, String> entry : fileMap.entrySet()) {
        if(filePath.toUpperCase().equals(entry.getValue())) {
            actualFilePath = entry.getKey();
            noOfOcc++;
        }
    }

    if(noOfOcc == 1) {
        return actualFilePath;
    }

    return filePath;
}

filePathファイルへのフル パスは次のとおりです。

于 2013-03-04T10:08:12.760 に答える