1

Javaでファイルをロードおよび保存する単純なアプリケーションを実行しています。Android に移植しようとしていますが、ファイルを表示するのに問題があります。

現在使用しているファイルパスは

private static final String SAVE_FILE_PATH = "data/save";

ファイルからデータをロードする関数は次のとおりです。

public void loadData() throws FileNotFoundException {
    File file = new File(SAVE_FILE_PATH);

    Scanner scanner;

    if (file.exists()) {

        scanner = new Scanner(new FileInputStream(file));
        try {
            while (scanner.hasNextLine()) {
                allPlayers.add(new Player(scanner.nextLine()));
            }
        } finally {
            scanner.close();
        }
    }
    else {
        System.out.println("No file found");
    }

        } finally {
            scanner.close();
        }
    }

    }
4

1 に答える 1

3

getExternalStorageDirectory()SD カードへのパスを取得する一方Activity.getExternalFilesDir()で、名目上はアプリケーション専用のディレクトリを返す (必要に応じて作成する) を使用することを検討してください。また、アプリケーションをアンインストールすると自動的に削除されるという利点もあります。これは API 8 の新機能であるため、古いデバイスをサポートしている場合は使用しないことをお勧めします。

それ以外の場合は、ρяσόρєя K のアドバイスに従う必要があります。使用するストレージ ディレクトリを作成することを忘れないでください。私のコードは通常次のようになります。

/**
 * Utility: Return the storage directory.  Create it if necessary.
 */
public static File dataDir()
{
    File sdcard = Environment.getExternalStorageDirectory();
    if( sdcard == null || !sdcard.isDirectory() ) {
        // TODO: warning popup
        Log.w(TAG, "Storage card not found " + sdcard);
        return null;
    }
    File datadir = new File(sdcard, "MyApplication");
    if( !confirmDir(datadir) ) {
        // TODO: warning popup
        Log.w(TAG, "Unable to create " + datadir);
        return null;
    }
    return datadir;
}


/**
 * Create dir if necessary, return true on success
 */
public static final boolean confirmDir(File dir) {
    if( dir.isDirectory() ) return true;
    if( dir.exists() ) return false;
    return dir.mkdirs();
}       

これを使用して、保存ファイルを指定します。

File file = new File(dataDir(), "save");

Scanner scanner;

if (file.exists()) {
  // etc.
}
于 2013-01-11T03:32:10.937 に答える