Java 我应该如何将文件扫描到数组或arraylist中,以便可以操纵该文件或将其读回给用户?

Java 我应该如何将文件扫描到数组或arraylist中,以便可以操纵该文件或将其读回给用户?,java,arrays,file-io,arraylist,Java,Arrays,File Io,Arraylist,我是新来的,所以如果我违反了一些规则,我很抱歉 无论如何,我目前正在学习一门Java课程,我们被分配了这个项目。该项目的重点是使用继承来编写这个程序。我打算制作一个“电话目录”,用户可以使用扫描仪扫描文件,并使用方法执行某些任务。 我的教授将这些列为我课程的要求……课程需要: 显示整个目录 使用您编写的二进制搜索Java方法,您可以使用您在类中编写的方法来 显示特定条目的内容 删除现有条目 在目录中插入一个条目,保持排序顺序 将整个目录保存到一个文件中 我认为使用arraylist是最有效的

我是新来的,所以如果我违反了一些规则,我很抱歉

无论如何,我目前正在学习一门Java课程,我们被分配了这个项目。该项目的重点是使用继承来编写这个程序。我打算制作一个“电话目录”,用户可以使用扫描仪扫描文件,并使用方法执行某些任务。 我的教授将这些列为我课程的要求……课程需要:

  • 显示整个目录
  • 使用您编写的二进制搜索Java方法,您可以使用您在类中编写的方法来 显示特定条目的内容
  • 删除现有条目
  • 在目录中插入一个条目,保持排序顺序
  • 将整个目录保存到一个文件中
我认为使用arraylist是最有效的方法

下面是我用来扫描文本文件的代码:

private Scanner fileIn;
private ArrayList<String> directory = new ArrayList<String>();

public void scanFile() {
    try {
        Scanner fileIn = new Scanner(new File("directory.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("Please make sure the directory file is actually there.");
    }
}
我计划在结尾使用/作为某种分隔符,告诉Java“嘿,这是一个完整的对象!”

这就是事情变得有点棘手的地方。为了完成这个程序需要做的一切,我需要将它全部扫描到我创建的目录arraylist中。我找不到一个有效的方法来做这件事

我希望能够扫描每一个对象(按行),这意味着每个人都有自己的行。在每一行中,我需要能够从行中提取数据片段。例如,我想在一行中操纵邮政编码,这样我就能够以某种方式识别出来

我想做第二台扫描仪来做这个,但我真的不知道该怎么做


谢谢。

最简单的方法是在
上使用
拆分
方法


假设每个条目放一行,您不必担心
/
,因为这会给您带来分隔。

您应该使用
nextLine()

例如:

ArrayList<String> list = new ArrayList<>();

Scanner inFile = new Scanner(file);

while (inFile.hasNextLine()) {
    String line = inFile.nextLine();
    list.add(line);
}
ArrayList list=new ArrayList();
扫描仪内嵌=新扫描仪(文件);
while(infle.hasNextLine()){
字符串行=infle.nextLine();
列表。添加(行);
}

首先,创建一个表示条目基本概念的
类,例如

public class DirectoryEntry {
    // Add fields and methods as required
    // Provide a simple constructor that will allow you to supply
    // the basic values for the available fields...
}
接下来,将每个条目放在
directory.txt
文件中自己的行上,这样您就可以简单地使用
Scanner\hasNextLine
Scanner\nextLine
读取文件

读取文件,解析每一行,以便将其拆分为各个字段元素,创建一个新实例
DirectoryEntry
,并将其添加到某种
java.util.List
,例如

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TestFileScanner {

    public static void main(String[] args) {
        Scanner fileIn = null;
        List<DirectoryEntry> enrties = new ArrayList<>(25);
        try {
            fileIn = new Scanner(new File("directory.txt"));
            while (fileIn.hasNextLine()) {
                String line = fileIn.nextLine();
                // Parse the individual line elements...
                DirectoryEntry de = new DirectoryEntry(...);
                enrties.add(de);
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共类测试文件扫描程序{
公共静态void main(字符串[]args){
Scanner fileIn=null;
列表恩尔蒂=新阵列列表(25);
试一试{
fileIn=newscanner(新文件(“directory.txt”);
while(fileIn.hasNextLine()){
String line=fileIn.nextLine();
//解析单个行元素。。。
DirectoryEntry de=新的DirectoryEntry(…);
增加(de);
}
}捕获(FileNotFoundException ex){
例如printStackTrace();
}
}
}

首先将每条记录存储在一行中。这将允许您使用
fileIn.nextLine()
Why“ArrayList list”。“名单”不是更好吗?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TestFileScanner {

    public static void main(String[] args) {
        Scanner fileIn = null;
        List<DirectoryEntry> enrties = new ArrayList<>(25);
        try {
            fileIn = new Scanner(new File("directory.txt"));
            while (fileIn.hasNextLine()) {
                String line = fileIn.nextLine();
                // Parse the individual line elements...
                DirectoryEntry de = new DirectoryEntry(...);
                enrties.add(de);
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

}