2013-09-30 33 views
-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”方法获得。注:打开之前请检查输出文件是否已存在 。如果有,请不要覆盖它。在状态 文本区域中为用户显示适当的消息,并且不要向该文件写入任何内容。
+0

是否inputtextfile.txt位于与您的java文件相同的目录? – jaesanx

+1

首先知道您的文件在哪里 – njzk2

+0

它位于我的资产目录 –

回答

0

先尝试使用相对路径进行调试。有些事情是这样的:File file = new File(“./target/test.txt”);

+0

明白了。你知道我会如何加倍这些数组值吗? –

2

错误消息

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

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

public class BaseClass { 

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

而你试图继承它:

public class SubClass extends BaseClass { 

} 

但​​(现在隐含的)构造函数隐式调用super()其抛出例外,其子类完全不准备,因为隐式构造函数是这样的:

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

所以,你必须定义一个明确的构造函数:

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

UPDATE

其实这个问题是由初始化与初始化抛出异常的实例字段造成的。在这种情况下,您必须将它们移动到引发异常的构造函数中:

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")); 
} 
+0

我该如何解决这个问题?所以使用Assetmanager导致了这个错误? –

+0

@JeffKimson你能展示更多的代码吗?一个最小的,可编辑的类仍然显示错误... – Katona

+0

肯定这是一个图片的链接。 http://imgur.com/rOJc0gY –

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>