編集: この投稿に出くわした人のために、通常の配列の代わりに ArrayList を使用して問題を修正しました。これにより、コードの約 3 分の 1 を切り取り、その多くを再利用可能にしました。以下を手伝ってくれたすべての人に感謝します。探している人のための私の更新されたコードへのリンクは次のとおりです: http://pastebin.com/Yh3LVu2H
このプログラムは、ファイルの行を読み取り、それらを xAxis と yAxis の 2 つの配列に出力することを目的としています。また、ScreenSizes.java を使用して GUI を構築するため、2 つのファイルに分割します。
「System.out.println("X: " + xAxis[index]);」という行で例外が発生します。
ScreenSizes.java からのコード:
package screensizes;
import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
public class ScreenSizes{
public String filePath = "/Users/jonny/Documents/UNI/ScreenSizes/xy.txt";
public static void main(String[] args) throws FileNotFoundException
{
ScreenSizes obj = new ScreenSizes();
obj.run();
}
public void run() throws FileNotFoundException {
GetScreens data = new GetScreens(filePath);
int noLines = data.countLines();
int[] xAxis = data.getData('x');
int[] yAxis = data.getData('y');
int index = 0;
while(index<noLines){
System.out.println("X: " + xAxis[index]);
index++;
}
}
}
GetScreens.java のコード
package screensizes;
import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
public class GetScreens
{
public int lines;
public String filePath = "";
public int[] x = new int[lines];
public int[] y = new int[lines];
public GetScreens(String aFileName) throws FileNotFoundException{
fFile = new File(aFileName);
filePath = aFileName;
try
{
processLineByLine();
countLines();
}
catch(FileNotFoundException fnfe)
{
System.out.println(fnfe.getMessage());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
public final void processLineByLine() throws FileNotFoundException {
//Note that FileReader is used, not File, since File is not Closeable
Scanner scanner = new Scanner(new FileReader(fFile));
try {
while ( scanner.hasNextLine() ){
processLine( scanner.nextLine() );
}
}
finally {
//ensure the underlying stream is always closed
//this only has any effect if the item passed to the Scanner
//constructor implements Closeable (which it does in this case).
scanner.close();
}
}
public int[] getData(char choice){
if(choice == 'x'){
return x;
}
else{
return y;
}
}
public void processLine(String aLine){
//use a second Scanner to parse the content of each line
Scanner scanner = new Scanner(aLine);
scanner.useDelimiter("x");
if ( scanner.hasNext() ){
for(int i=0; i<lines; i++){
x[i] = scanner.nextInt();
y[i] = scanner.nextInt();
}
}
else {
log("Empty or invalid line. Unable to process.");
}
}
public int countLines(){
try
{
BufferedReader reader = new BufferedReader(new FileReader(filePath));
while (reader.readLine() != null) lines++;
reader.close();
}
catch(FileNotFoundException fnfe)
{
System.out.println(fnfe.getMessage());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
return lines;
}
// PRIVATE
public final File fFile;
private void log(Object aObject){
System.out.println(String.valueOf(aObject));
}
private String quote(String aText){
String QUOTE = "'";
return QUOTE + aText + QUOTE;
}
}