0

私の問題は次のコードにあります。

alreadyUser(String username)問題は、ファイルがまだシステムに存在しない場合に呼び出すと、FileNotFoundException が発生することです。このエラーを乗り越えたいのですが、わかりません。

そのため、アプリの起動時に、システムは uname と pass を要求します。次に、 alreadyUser メソッドが呼び出され、ファイルがまだほとんど作成されていない場合はエラーが発生します(たとえば、手動で作成します)。そして、次にプログラムを起動するときに、ファイルが既に存在する場合は、古いデータがなくなるため、新しいデータに切り替えてはなりません:)

public final class TinyBase {

    final static String FILENAME = "KEYVALUES.txt";
    static FileOutputStream fos = null;
    static FileInputStream fis = null;

    protected static void createUser(String username, String password)

    protected static boolean loadUser(String username, String password)

    protected static boolean alreadyUser(String username) {
        String encode = new String(username);
        String compare = null;
        boolean flag = false; // true - ok no such user ; false - fail username
                                // already in use
        try {
            /* ERROR IS HERE */
            fis = new FileInputStream(FILENAME);
            /* ERROR IS HERE */
            byte[] buffer = new byte[fis.available()];

            while (fis.read(buffer) != -1) {
                compare = new String(buffer);
                if (compare.contains(encode)) {
                    flag = true;
                    break;
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
                return flag;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}
4

2 に答える 2

0

FileNotFoundCaseスナップショットによると、必要なのは適切に処理することだと思います:

// ....
} catch (FileNotFoundException e) {
        Log.d("no settings for the user - assuming new user");
        flag = true;
}

ところで、前の例外のfis場合はnullになる可能性があるため、最終ブロックを修正する必要があるため、回避NullPointerExceptionするには追加のチェックが必要になる場合があります。

if (fis != null) {
    fis.close();
}

アップデート

あなたの問題に対する私の理解に基づいて、あなたが必要とする可能性のあるもののスケッチを次に示します。

    // ... somewhere at startup after username/pass are given

    // check if file exists
    if (new File(FILENAME).isFile() == false) { // does not exist
        fos = new FileOutputStream(FILENAME); // will create 
                                              // file for you (not subfolders!)
        // write content to your file
        fos.close();
    }

    // by this point file exists for sure and filled with correct user data
    alreadyUser(userName);
于 2013-10-28T21:16:15.480 に答える
0

-を使用してファイルが存在するかどうかを確認します

File f = new File(filePathString);
if(f.exists()) { /* do something */ }
于 2013-10-28T21:06:40.840 に答える