-1

应用程序出现问题

我需要从每行包含一个整数的文本文件中读取数据,我需要将其读入数组并将它们加倍,然后将其输出到另一个文本文件。但是,我无法打开和读取文件,因此我可以将它们添加到数组中。

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。必须定义显式构造函数

任何人都知道我会如何解决这个问题?#固定的#

这是我要做的事情的要点

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

3 回答 3

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"));
}
于 2013-09-30T18:08:31.807 回答
0

首先尝试相对路径进行调试。类似:File file = new File("./target/test.txt");

于 2013-09-30T18:07:30.040 回答
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>

于 2013-10-01T08:10:16.163 回答