我为我的项目创建的系统将是Java中的课程注册系统。
我现在面临的问题是如何附加到特定行(我们可以说是参考学生ID),以便注册代码模块位于逗号后面的行后面。
每当我尝试追加时,它总会附加到文件的最后一行。
在注册模块之后,我还需要显示该特定学生的特定学生行的所有模块。
我一直在研究解决方案。 有人说,实现arrayList->文件/从文件中写入和读取数据会更容易。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
首先阅读您的文件。
List<String> lines = Files.readAllLines(Paths.get("/path/to/your/file.txt"), StandardCharsets.UTF_8);
然后查找并修改您的行,在此示例中,我修改以&#34; 0327159&#34;开头的行。
List<String> toWrite = new ArrayList<>();
for(int i = 0; i<lines.size(); i++){
String line = lines.get(i);
if(line.startsWith("0327159")){
String updated = line.trim() + ", more text\n";
toWrite.add(updated);
} else{
toWrite.add(line);
}
}
所以现在toWrite
包含您要写入文件的所有行。
Files.write(
Paths.get("/path/to/outfile.txt"),
toWrite,
StandardCharsets.UTF_8,
StandardOpenOptions.CREATE,
StandardOpenOptions.TRUNCATE_EXISTING );
答案 1 :(得分:0)
你应该尝试一种基于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();
}
}
}
}