1

アセットフォルダーから数字のテキストファイルを読み取り、それらの数字を配列にコピーし、各数字の値を2倍にし、2倍にした数字の新しいセットをアプリの外部ファイルディレクトリに書き込むAndroidアプリケーションを作成しようとしています。2 つのファイル名を入力すると、アプリがクラッシュします。エラーの大部分は、外部ファイルに書き込もうとした方法にあると思います。私は多くの異なる投稿を読みましたが、正しく書く方法を正確に理解できないようです。

public void readArray() {

    EditText editText1;
    EditText editText2;
    TextView tv;

    tv = (TextView) findViewById(R.id.text_answer);
    editText1 = (EditText) findViewById(R.id.input_file);
    editText2 = (EditText) findViewById(R.id.output_file);

    int numGrades = 0;
    int[] gradeList = new int[20];

    String fileLoc = (String) (editText1.getText().toString());

    try {
        File inFile = new File("file:///android_asset/" + fileLoc);
        Scanner fsc = new Scanner(inFile);

        while (fsc.hasNext()) {
            gradeList[numGrades] = fsc.nextInt();
            numGrades++;
        }
    } catch (FileNotFoundException e) {
        tv.append("error: file not found");
    }

    for (int i = 0; i < gradeList.length; i++) {
        gradeList[i] = gradeList[i] * 2;
    }

    String fileLoc2 = (String) (editText2.getText().toString());

    FileWriter fw;

    //new code
    File root = Environment.getExternalStorageDirectory();
    File file = new File(root, fileLoc2);

    try {
        if (root.canWrite()) {
            fw = new FileWriter(file);

            //PrintWriter pw = new PrintWriter(fw);
            BufferedWriter out = new BufferedWriter(fw);

            for (int i = 0; i < gradeList.length; i++) {
                out.write(gradeList[i]);
            }
            out.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

また、事前に初心者のような質問をして申し訳ありません

4

1 に答える 1

0

AssetManagerアセットからファイルを開くには、クラスを使用してみてください。

詳細はこちら: http://developer.android.com/reference/android/content/res/AssetManager.html

次の方法でファイルを読み取ることができます。

AssetManager am = context.getAssets();     
InputStream is = am.open("text");       
BufferedReader in = new BufferedReader(new InputStreamReader(is));       
String inputLine;       
while ((inputLine = in.readLine()) != null)         
    System.out.println(inputLine);
in.close();
于 2013-10-02T03:36:06.517 に答える