访问文本文件并读取Array内的整数?请帮忙

时间:2013-09-30 17:57:54

标签: java android arrays file text

使用应用程序时出现问题

我需要从文本文件中读取数据,每行包含一个整数,我需要将其读入数组并加倍,然后将其输出到另一个文本文件。但是,我不能让文件打开并被读取,所以我可以将它们添加到数组。

package com.example.doubleandsave;

import java.io.File;
import java.util.Scanner;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.view.Menu;

public class MainActivity extends Activity {


int[] inArray; 

File infile = new File("inputtextfile.txt");

Scanner fsc = new Scanner(infile);


AssetManager assetManager = getAssets();
Scanner fsc1 = new Scanner(assetManager.open("inputtextfile.txt")); 





@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}


}

这两行给出了错误默认构造函数无法处理由隐式超级构造函数抛出的异常类型IOException。必须定义一个明确的  构造

任何人都知道如何解决这个问题? #fixed#

这是我必须做的事情的要点

  1. 打开具有给定名称的输入(文本)文件(上面的第一个EditText字段)。该文件应出现在 您应用的“资产”目录。它应包含一个成绩列表(每行一个)。把成绩读成一个 阵列。 (如果文件不存在,请在标记的屏幕的文本区域中显示相应的消息 “状态。”上面。)
  2. 使用方法加倍数组中的所有值。 (包括此方法在您的主要 活动类,并从响应按钮按下的方法调用它。)
  3. 将双重等级列表(每行一个)输出到具有给定名称的新文件(第二个EditText 上面的字段)。此文件应出现在应用程序的外部文件目录中,可以使用该目录获取 内置SDK“getExternalFilesDir”方法。注意:检查输出文件是否已存在 在打开它之前。如果是,请不要覆盖它。在状态中为用户显示相应的消息 文本区域,不要写任何文件。

3 个答案:

答案 0 :(得分:2)

错误消息

  

默认构造函数无法处理隐式超级构造函数抛出的异常类型IOException。必须定义一个显式的构造函数。

很清楚。你有一个基类,构造函数抛出一个IOException

public class BaseClass {

    public BaseClass() throws IOException {
        // ...
    }
}

你正在尝试将其子类化:

public class SubClass extends BaseClass {

}

SubClass的(现在是隐含的)构造函数隐式调用super(),它会抛出一个根本没有准备子类的异常,因为隐式构造函数看起来像这样:

public SubClass() {
    super();  // this throws an IOException which is not declared to be thrown by SubClass constructor
}

因此,您必须定义一个显式构造函数:

public SubClass() throws IOException { 
    super();
}

<强>更新

问题实际上是由初始化实例字段和初始化器抛出异常引起的。在这种情况下,您必须在抛出异常的构造函数中移动它们:

public MainActivity() throws IOException {
    File infile = new File("inputtextfile.txt");

    Scanner fsc = new Scanner(infile);


    AssetManager assetManager = getAssets();
    Scanner fsc1 = new Scanner(assetManager.open("inputtextfile.txt"));
}

答案 1 :(得分:0)

首先尝试相对路径进行调试。有些事情:文件文件=新文件(“./ target / test.txt”);

答案 2 :(得分:0)

您正在尝试在方法之外执行代码。将您的代码更改为此,我已将声明和初始化分开:

public class MainActivity extends Activity {

    int[] inArray; 

    File infile;

    Scanner fsc;

    AssetManager assetManager;
    Scanner fsc1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        infile = new File("inputtextfile.txt");

        fsc = new Scanner(infile);

        assetManager = getAssets();

        fsc1 = new Scanner(assetManager.open("inputtextfile.txt")); 

    }

请注意。您应该花时间了解活动生命周期。在onCreate()中执行此操作可能不是最佳选择。您还可以找到比int[]更容易使用的集合,可能ArrayList<Integer>