4

ファイル入力ストリームを返す関数を作成しようとしています。次のようになります。

public FileInputStream getFileInputStream() {
    File file;
    try {
        file = new File("somepath");
    } catch (Exception e) {
    }
    FileInputStream fInputStream = new FileInputStream(file);
    return fInputStream;
}

ここに私の問題があります-例外が発生した場合、明らかにファイルは作成されません。しかし、FileInputStream をインスタンス化するには、ファイル オブジェクトが必要です。ここで少し迷っています。有効な FileInputStream オブジェクトを返しながら例外を処理するにはどうすればよいですか?

4

3 に答える 3

12

それは、例外をさらにスローするという考えです。呼び出し元に例外をスローするだけです。

public FileInputStream getFileInputStream() throws FileNotFoundException
{
    File file = new File("somepath");
    FileInputStream fInputStream = new FileInputStream(file);
    return fInputStream;
}

このように、呼び出し元はそれを処理する必要があります。これは、それを操作する最もクリーンな方法です。

注意File:オブジェクトをインスタンス化しても例外がスローされないことを知っておく必要があります。FileInputStream例外をスローする可能性があるのは、のインスタンス化です。

于 2013-03-09T21:15:25.793 に答える
3

File.exists()を使用して、ファイルで何かを実行できることを確認します。

UPD ( Java FileOutputStream 存在しない場合はファイルを作成):

File yourFile = new File("score.txt");
if(!yourFile.exists()) {
    yourFile.createNewFile();
} 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 
于 2013-03-09T21:16:53.637 に答える
0

これが私が使用するコードです。面白いと思うかもしれません。

public static final Charset UTF_8 = Charset.forName("UTF-8");

/**
 * Provide a normalised path name which can contain SimpleDateFormat syntax.
 * <p/>
 * e.g.  'directory/'yyyyMMdd would produce something like "directory/20130225"
 *
 * @param pathName to use. If it starts or ends with a single quote ' treat as a date format and use the current time
 * @return returns the normalise path.
 */
public static String normalisePath(String pathName) {
    if (pathName.startsWith("'") || pathName.endsWith("'"))
        return new SimpleDateFormat(pathName).format(new Date());
    return pathName;
}

/**
 * Convert a path to a Stream. It looks first in local file system and then the class path.
 * This allows you to override local any file int he class path.
 * <p/>
 * If the name starts with an =, treat the string as the contents.  Useful for unit tests
 * <p/>
 * If the name ends with .gz, treat the stream as compressed.
 * <p/>
 * Formats the name with normalisePath(String).
 *
 * @param name of path
 * @return as an InputStream
 * @throws IOException If the file was not found, or the GZIP Stream was corrupt.
 */
public static InputStream asStream(String name) throws IOException {
    String name2 = normalisePath(name);
    // support in memory files for testing purposes
    if (name2.startsWith("="))
        return new ByteArrayInputStream(name2.getBytes(UTF_8));
    InputStream in;
    try {
        in = new FileInputStream(name2);
    } catch (FileNotFoundException e) {
        in = Reflection.getCallerClass(3).getClassLoader().getResourceAsStream(name2);
        if (in == null)
            throw e;
    }
    if (name2.endsWith(".gz") || name2.endsWith(".GZ"))
        in = new GZIPInputStream(in);
    in = new BufferedInputStream(in);
    return in;
}
于 2013-03-09T21:50:26.563 に答える