Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JAVA中使用文本文件附加到特定行?_Java_Arraylist - Fatal编程技术网

如何在JAVA中使用文本文件附加到特定行?

如何在JAVA中使用文本文件附加到特定行?,java,arraylist,Java,Arraylist,我为我的项目创建的系统将是Java中的课程注册系统 我现在面临的问题是,如何将注册码模块附加到特定的行(我们可以说是引用学生ID),以便注册码模块位于逗号后的行后面 每次我尝试附加时,它总是附加到文件的最后一行 文本文件示例: 注册模块后,我还需要显示该特定科目的特定学生行的所有模块 我一直在研究解决问题的办法。 有人说,实现arrayList->File/从文件中写入和读取数据会更容易 有人能帮我解决这个问题吗?先读一下你的文件 List<String> lines = File

我为我的项目创建的系统将是Java中的课程注册系统

我现在面临的问题是,如何将注册码模块附加到特定的行(我们可以说是引用学生ID),以便注册码模块位于逗号后的行后面

每次我尝试附加时,它总是附加到文件的最后一行

文本文件示例:

注册模块后,我还需要显示该特定科目的特定学生行的所有模块

我一直在研究解决问题的办法。 有人说,实现arrayList->File/从文件中写入和读取数据会更容易


有人能帮我解决这个问题吗?

先读一下你的文件

List<String> lines = Files.readAllLines(Paths.get("/path/to/your/file.txt"), StandardCharsets.UTF_8);
Files.write(
    Paths.get("/path/to/outfile.txt"), 
    toWrite, 
    StandardCharsets.UTF_8, 
    StandardOpenOptions.CREATE, 
    StandardOpenOptions.TRUNCATE_EXISTING );

您真的应该尝试一种基于JSON的方法,使其不那么笨拙并消除混淆。这里有一个有效的例子。我的代码每次都会添加一个新学员,每次都会向现有学员添加一个新模块。代码并没有真正优化,因为这只是为了举例说明

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ModuleRegistration
{
    public static void main(String[] args) throws IOException
    {
        File file = new File("C:\\MyStudents.txt");
        if (!file.exists())
            file.createNewFile();

        List<String> lines = Files.readAllLines(Paths.get(file.getAbsolutePath()));
        ObjectMapper mapper = new ObjectMapper();
        List<StudentInfo> newLines = new ArrayList<StudentInfo>(2);
        for (String line : lines)
        {
            StudentInfo info = mapper.readValue(line, StudentInfo.class);
            String modules = info.getModules() == null ? "" : info.getModules();
            if (!"".equals(modules))
                modules += ",";
            modules += "Module" + System.currentTimeMillis();
            info.setModules(modules);
            newLines.add(info);
        }
        StudentInfo info = new StudentInfo();
        long time = System.currentTimeMillis();
        info.setId(time);
        info.setModules("Module" + time);
        info.setName("Name" + time);
        info.setPassword("Password" + time);
        info.setType("Local");
        newLines.add(info);

        try (FileWriter writer = new FileWriter(file, false);)
        {
            for (StudentInfo i : newLines)
            {
                writer.write(i.toString());
                writer.write(System.lineSeparator());
            }
        }

        System.out.println("Done");
    }

    static class StudentInfo
    {
        @JsonProperty("id")
        private long id;

        @JsonProperty("password")
        private String password;

        @JsonProperty("name")
        private String name;

        @JsonProperty("type")
        private String type;

        @JsonProperty("modules")
        private String modules;

        // getters and setters

        @Override
        public String toString()
        {
            try
            {
                return new ObjectMapper().writeValueAsString(this);
            }
            catch (JsonProcessingException exc)
            {
                exc.printStackTrace();
                return exc.getMessage();
            }
        }
    }
}
导入java.io.File;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.util.ArrayList;
导入java.util.List;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
公共类模块注册
{
公共静态void main(字符串[]args)引发IOException
{
File File=新文件(“C:\\MyStudents.txt”);
如果(!file.exists())
createNewFile();
列表行=Files.readAllLines(path.get(file.getAbsolutePath());
ObjectMapper mapper=新的ObjectMapper();
列表换行符=新数组列表(2);
用于(字符串行:行)
{
StudentInfo=mapper.readValue(第行,StudentInfo.class);
字符串modules=info.getModules()==null?”:info.getModules();
如果(!“”.equals(模块))
模块+=“,”;
模块+=“模块”+系统.currentTimeMillis();
信息设置模块(模块);
换行。添加(信息);
}
StudentInfo=newstudentinfo();
长时间=System.currentTimeMillis();
info.setId(时间);
信息设置模块(“模块”+时间);
信息集名称(“名称”+时间);
信息设置密码(“密码”+时间);
信息集类型(“本地”);
换行。添加(信息);
try(FileWriter=newfilewriter(file,false);)
{
用于(学生信息一:换行)
{
writer.write(i.toString());
writer.write(System.lineSeparator());
}
}
系统输出打印项次(“完成”);
}
静态类学生信息
{
@JsonProperty(“id”)
私人长id;
@JsonProperty(“密码”)
私有字符串密码;
@JsonProperty(“名称”)
私有字符串名称;
@JsonProperty(“类型”)
私有字符串类型;
@JsonProperty(“模块”)
私有字符串模块;
//接球手和接球手
@凌驾
公共字符串toString()
{
尝试
{
返回新的ObjectMapper().writeValueAsString(this);
}
捕获(JsonProcessingException)
{
exc.printStackTrace();
返回exc.getMessage();
}
}
}
}

向我们展示您迄今为止所做的任何尝试,也许i/p和o/p示例将帮助我们了解更多有关您的问题您不能只在文件的某个部分插入文本。最简单的方法就是用更新的文本重写整个文件。@matt Yes。我怎么能这么做?我认为用更新的文本重写整个文件是最好的选择。但是我如何存储以前的文本,使其在重写后不会被擦除?@AmeyYadav我如何向您展示我项目的i/p和o/p示例?@matt的解决方案是正确的。您可以将文本存储在内存和文件中。在启动时,应用程序读取整个文件。内存中的每一个更改都可以传输到文件中进行持久化(您也可以采用其他类型的策略)。和标准字符集。正如它所说,我找不到symbol@OliverSim您使用的是哪种java?此外,它是带有“是”的
StandardCharsets
。解决了标准字符集问题。但是对于.get方法,它仍然显示“无法找到”symbol@OliverSim肯定有办法得到。你在结尾用“s”吗?该死的。我忘了输入所有的库。对我现在就去试试。非常感谢马特!!!
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ModuleRegistration
{
    public static void main(String[] args) throws IOException
    {
        File file = new File("C:\\MyStudents.txt");
        if (!file.exists())
            file.createNewFile();

        List<String> lines = Files.readAllLines(Paths.get(file.getAbsolutePath()));
        ObjectMapper mapper = new ObjectMapper();
        List<StudentInfo> newLines = new ArrayList<StudentInfo>(2);
        for (String line : lines)
        {
            StudentInfo info = mapper.readValue(line, StudentInfo.class);
            String modules = info.getModules() == null ? "" : info.getModules();
            if (!"".equals(modules))
                modules += ",";
            modules += "Module" + System.currentTimeMillis();
            info.setModules(modules);
            newLines.add(info);
        }
        StudentInfo info = new StudentInfo();
        long time = System.currentTimeMillis();
        info.setId(time);
        info.setModules("Module" + time);
        info.setName("Name" + time);
        info.setPassword("Password" + time);
        info.setType("Local");
        newLines.add(info);

        try (FileWriter writer = new FileWriter(file, false);)
        {
            for (StudentInfo i : newLines)
            {
                writer.write(i.toString());
                writer.write(System.lineSeparator());
            }
        }

        System.out.println("Done");
    }

    static class StudentInfo
    {
        @JsonProperty("id")
        private long id;

        @JsonProperty("password")
        private String password;

        @JsonProperty("name")
        private String name;

        @JsonProperty("type")
        private String type;

        @JsonProperty("modules")
        private String modules;

        // getters and setters

        @Override
        public String toString()
        {
            try
            {
                return new ObjectMapper().writeValueAsString(this);
            }
            catch (JsonProcessingException exc)
            {
                exc.printStackTrace();
                return exc.getMessage();
            }
        }
    }
}