java - 读取文件并创建数组
java - read file and create array
我必须遵循特定格式并使用扫描仪。我知道有更好的方法,但这是一项要求,我是 java 的新手,正在尝试解决这个问题。有一个包含客户姓名、出生日期和其他信息的文件。我需要计算文件中的条目数,然后文件需要根据文件条目数创建一个数组并将该数组转换为字符串数组。我需要做更多的代码,但我被困在这部分。必须使用 try/catch。
public class Customers {
//////// MAIN ////////
public static void main(String[] args) {
File file = new File("customers.txt");
int numEntries = countCustomers(file);
Person[] customers = readIntoArray(file, numCustomers);
int min = locateBirthdate(customers);
System.out.println("Birthdays this month: " + customer[mon].getBirthdate());
}
//* Counts customers in the file.//
public static int countCustomers(File f) {
int i = 0;
try {
Scanner scan = new Scanner(f);
while (scan.hasNextLine()) {
i++;
scan.nextLine();
}
} catch (Exception e) {
System.out.println("Check filename.");
}
return i;
}
//read data into array and convert into string array
public static Customer[] readIntoArray(File f, int num) {
//num = countCustomers(f);
num = 0;
try {
Scanner input = new Scanner(f);
Customer[] birth = new Customer[num];
String[] strBirth = new String[num];
while (num < countCustomers(f)) {
strBirth[num] = input.nextLine();
birth[num] = makeCustomer(strBirth[num]);
num++;
System.out.println(num);
}
} catch (Exception e) {
System.out.println("Error");
}
return null;
好的。我有几个意见。
首先 - 你真的需要 'strBirth' 数组吗?看起来你只写元素而不是从数组中读取。
第二 - 'readIntoArray' 方法总是 returns null。
此外,您计算了两次客户,但一次就足够了。
那么,你真的需要和客户一起摆阵吗?由于您使用数组,因此您需要确切地知道客户的数量,因此您需要扫描文件两次。如果你使用ArrayList,你只需要扫描文件一次。
我已经修复了下面代码中的问题。
public class Customers {
//////// MAIN ////////
public static void main(String[] args) {
File file = new File("customers.txt");
Person[] customers = readIntoArray(file, numCustomers);
int numEntries = customers.length;
int min = locateBirthdate(customers);
System.out.println("Birthdays this month: " + customer[mon].getBirthdate());
}
public static Person[] readIntoArray(File f, int num) {
List<Customer> customers = new ArraList<>();
try {
Scanner input = new Scanner(f);
String[] strBirth = new String[num];
while (scan.hasNextLine()) {
customers.add(makeCustomer(scan.nextLine()));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return customers.toArray(Person[]::new);
}
我必须遵循特定格式并使用扫描仪。我知道有更好的方法,但这是一项要求,我是 java 的新手,正在尝试解决这个问题。有一个包含客户姓名、出生日期和其他信息的文件。我需要计算文件中的条目数,然后文件需要根据文件条目数创建一个数组并将该数组转换为字符串数组。我需要做更多的代码,但我被困在这部分。必须使用 try/catch。
public class Customers {
//////// MAIN ////////
public static void main(String[] args) {
File file = new File("customers.txt");
int numEntries = countCustomers(file);
Person[] customers = readIntoArray(file, numCustomers);
int min = locateBirthdate(customers);
System.out.println("Birthdays this month: " + customer[mon].getBirthdate());
}
//* Counts customers in the file.//
public static int countCustomers(File f) {
int i = 0;
try {
Scanner scan = new Scanner(f);
while (scan.hasNextLine()) {
i++;
scan.nextLine();
}
} catch (Exception e) {
System.out.println("Check filename.");
}
return i;
}
//read data into array and convert into string array
public static Customer[] readIntoArray(File f, int num) {
//num = countCustomers(f);
num = 0;
try {
Scanner input = new Scanner(f);
Customer[] birth = new Customer[num];
String[] strBirth = new String[num];
while (num < countCustomers(f)) {
strBirth[num] = input.nextLine();
birth[num] = makeCustomer(strBirth[num]);
num++;
System.out.println(num);
}
} catch (Exception e) {
System.out.println("Error");
}
return null;
好的。我有几个意见。 首先 - 你真的需要 'strBirth' 数组吗?看起来你只写元素而不是从数组中读取。 第二 - 'readIntoArray' 方法总是 returns null。 此外,您计算了两次客户,但一次就足够了。 那么,你真的需要和客户一起摆阵吗?由于您使用数组,因此您需要确切地知道客户的数量,因此您需要扫描文件两次。如果你使用ArrayList,你只需要扫描文件一次。
我已经修复了下面代码中的问题。
public class Customers {
//////// MAIN ////////
public static void main(String[] args) {
File file = new File("customers.txt");
Person[] customers = readIntoArray(file, numCustomers);
int numEntries = customers.length;
int min = locateBirthdate(customers);
System.out.println("Birthdays this month: " + customer[mon].getBirthdate());
}
public static Person[] readIntoArray(File f, int num) {
List<Customer> customers = new ArraList<>();
try {
Scanner input = new Scanner(f);
String[] strBirth = new String[num];
while (scan.hasNextLine()) {
customers.add(makeCustomer(scan.nextLine()));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return customers.toArray(Person[]::new);
}