Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何解析文件中的数据行以填充每个文件的对象?

如何解析文件中的数据行以填充每个文件的对象?
EN

Stack Overflow用户
提问于 2018-06-30 08:19:08
回答 3查看 643关注 0票数 0

我有一个包含列表的文本文件,每一行都有我需要插入新对象的数据。因此,数据看起来像somename=3000或另一种带有斜杠data another type = 6000的类型。

我有一个特殊的类"Item“,它有Stringint变量。需要将数据插入其中。每个新对象都必须添加到ArrayList<Item>中。

代码语言:javascript
运行
AI代码解释
复制
// Calculate the lines for next for each loop
int lineCount = 0;
while (sc.hasNextLine()) {
    lineCount++;
    sc.nextLine();
}

for (int i = 0; i < lineCount; i++) {
    // creating the object
    Item item = new Item();
    // add item object to items ArrayList
    items.add(item);

    // add line to String variable lineToString,
    while (scaner.hasNextLine()) {
        String lineToString = scaner.nextLine();
        sc.nextLine();
    }

所以,我想,要做到这一点,我需要

  • 复制整行并放入某个字符串变量;
  • 对于整数和字符串变量,将其拆分;
  • 将字符串部分插入到字符串变量,数字插入到int变量,特别是在"for循环“迭代时间创建的对象中。
  • 将包含数据的对象添加到ArrayList中。

我使用Scanner读取文本文件。当我试图将scaner.nextLine插入到String中时,它不起作用;我的意思是它正在执行,但是变量字符串lineToString没有文本文件中的行。

有人能帮我想一想如何更好地解决这个问题吗?也许有更简单的方法从对象中的文本文件行插入2种不同类型的数据,并将其放入ArrayList中?文本文件中的每一行都有不同的数据,并且必须位于不同的对象中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-30 08:32:59

您没有从文本文件中清楚地提到行格式。到目前为止,我假设您有文本文件,其中每一行如下

代码语言:javascript
运行
AI代码解释
复制
someone=140000

您正在尝试读取这些文本行,并将它们分别解析为Item的一个对象,该对象包含一个String属性(我假设您将其命名为name)和一个int属性(假设您将其命名为number)。

如果是这样,您就不需要逐行读取文本文件并进一步处理它。有几种方法可以逐行读取文本文件。

BufferReader

这是一种非常常见且迄今为止最合适的读取文本文件的方法,以考虑性能。

代码语言:javascript
运行
AI代码解释
复制
List<Item> particulatItems = new ArrayList<>();

// using try-with-resource that will help closing BufferedReader by own
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       particularItems.add(processLine(line));
    }
}

扫描仪

你也可以用Scanner

代码语言:javascript
运行
AI代码解释
复制
try (Scanner scanner = new Scanner(new File(fileName))) {
     while (scanner.hasNext()) {
        particularItems.add(processLine(line));
     }

} catch (FileNotFoundException e) {
   e.printStackTrace();
} 

您应该将行处理逻辑提取为一个独立的函数。这是清洁编码的良好实践。

代码语言:javascript
运行
AI代码解释
复制
public static Item processLine(Strinng line) {
     String[] tokens = line.split("=");
     Item item = new Item(tokens[0], tokens[1]);
}

假设您将特定对象定义为Item,并且正在填充此类型的List

代码语言:javascript
运行
AI代码解释
复制
 public class Item {
    String name;
    int number;

    public Item(String name, String numtxt) {
       this.name = name;
       this.number = Integer.parseInt(numtxt);
    }

   // setter getter
 }

更多阅读:

  1. 如何使用Java逐行读取大型文本文件?
  2. 用Java读取文本文件的不同方法
  3. 扫描仪与BufferReader的区别
  4. 在Java 7中尝试使用资源
票数 1
EN

Stack Overflow用户

发布于 2018-06-30 08:28:56

看起来您已经在下面的代码片段中扫描了完整的文件:

代码语言:javascript
运行
AI代码解释
复制
while (sc.hasNextLine()) {
    lineCount++;
    sc.nextLine();
}

在此之后,您将再次在for-循环中迭代,但使用相同的扫描器,它读取了最后一行,因此以下内容可能返回false:

代码语言:javascript
运行
AI代码解释
复制
while (scaner.hasNextLine()) 

我可能永远也进不了循环

在再次迭代行之前,您应该重新设置扫描器。也可以使用扫描仪以外的其他工具来计数行数。

票数 0
EN

Stack Overflow用户

发布于 2018-06-30 08:32:12

除了@Ashish Mishra提到的,您正在执行for循环中的第二个while循环,为什么?一个循环还不够吗?

代码语言:javascript
运行
AI代码解释
复制
    int lineCount = 0;
    while (sc.hasNextLine()) {
        lineCount++;
        String lineToString = sc.nextLine();
        Item item = new Item();
        //convert lineToString to item
        items.add(item);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51116565

复制
相关文章
java poi拆分excel文件,每个文件保留标题行
在工作中,经常需要处理excel文件,将提供的excel文件导入数据库,有时候文件太大我们就需要做拆分了,下面实现将xlsx文件和xls文件按行数拆分,每个文件都保留标题行。这篇文件接着前面拆分csv大文件进行学习。
jiankang666
2022/05/12
8580
如何用 awk 删除文件中的重复行【Programming】
了解如何在不排序或更改其顺序的情况下使用awk'!visited $ 0 ++'。
Potato
2019/11/09
8.8K0
如何用 awk 删除文件中的重复行【Programming】
java实现csv大文件拆分,每个小文件都有标题行
开发中,我们经常需要导入csv文件到数据库中,但是如果csv文件太大了,可能会报错,这时候可以对csv文件进行拆分,分批导入。本节就以spring boot项目为例实现csv大文件拆分并输出拆分后的zip包。
jiankang666
2022/05/12
1.7K0
java实现csv大文件拆分,每个小文件都有标题行
uniq命令 – 去除文件中的重复行
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行。去除了重复的,保留的都是唯一的,也就是独特的,唯一的了。
用户4988085
2021/07/24
3K0
如何删除一个文件名以分号开头的文件
该文讲述了如何删除一个文件名以分号开头的文件。作者通过在Linux上使用VIM编辑器不小心创建了一个文件名以分号开头的文件,尝试使用多种方法删除该文件,包括使用rm命令和转义字符。最后,作者通过在rm命令中添加转义字符成功删除了该文件。
雷大亨
2018/01/01
2.4K0
【Python】文件操作 ⑤ ( 文件操作 | 以只读模式向已有文件写入数据 | 以追加模式向已有文件写入数据 | 以追加模式打开一个不存在的文件 )
使用 write 函数向已有文件写入数据 , 会清空该文件中的数据 , 代码展示如下 :
韩曙亮
2023/10/11
5570
【Python】文件操作 ⑤ ( 文件操作 | 以只读模式向已有文件写入数据 | 以追加模式向已有文件写入数据 | 以追加模式打开一个不存在的文件 )
Laravel 迁移文件migrations 和 数据填充seeders
迁移文件 migration #创建一个迁移 php artisan make:migration create_store_categories_table #运行所有未完成的迁移 php artisan migrate #如果要查看到目前为止已运行哪些迁移 php artisan migrate:status #如果您希望查看迁移将执行的 SQL 语句而不实际运行它们 php artisan migrate --pretend #某些迁移操作具有破坏性,这意味着它们可能会导致数据丢失。为了防止
崔哥
2023/01/02
1.5K0
如何在ELK中解析各类日志文件
作为一个日志中心,它会收集各种各样的日志,可以用于问题排查,数据监控,统计分析等等。那么对于繁多的日志,它们都有各自的存储格式,我们如何来区分它们,对于不同的日志格式,我们又是如何去解析的呢? 一长串没有结构化的日志,给人的感觉很凌乱。我们需要的是提取日志中的有效字段,并以我们期望的形式进行展现。下面我将和大家一起来探究日志解析的奥秘。 原理 依照前文,使用filebeat来上传日志数据,logstash进行日志收集与处理,elasticsearch作为日志存储与搜索引擎,最后使用kibana展现日志的可视
Java架构
2018/05/04
7.8K1
如何在ELK中解析各类日志文件
【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
中 , 将结构体 ( 数组 ) 数据写入到了文件中 , 然后又从文件中读取 结构体 ( 数组 ) 并打印出来 ;
韩曙亮
2023/03/29
6750
【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
如何使用python读取txt文件中的数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139037.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
6.9K0
使用uniq命令去除文件中的重复行
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行。去除了重复的,保留的都是唯一的,也就是独特的,唯一的了。
用户7639835
2021/08/28
2.1K0
【Python】PySpark 数据输入 ① ( RDD 简介 | RDD 中的数据存储与计算 | Python 容器数据转 RDD 对象 | 文件文件转 RDD 对象 )
RDD 英文全称为 " Resilient Distributed Datasets " , 对应中文名称 是 " 弹性分布式数据集 " ;
韩曙亮
2023/10/11
5250
【Python】PySpark 数据输入 ① ( RDD 简介 | RDD 中的数据存储与计算 | Python 容器数据转 RDD 对象 | 文件文件转 RDD 对象 )
Java中解析XML文件
树结构,有助于更好地理解、掌握,代码易于编写,在解析过程中树结构是保存在内存中,方便修改
头发还在
2023/10/16
2790
Java仪器数据文件解析-PDF文件
一、概述 使用pdfbox可生成Pdf文件,同样可以解析PDF文本内容。 pdfbox链接:https://pdfbox.apache.org/ 二、PDF文本内容解析 File file = new
用户1637609
2018/04/12
1.4K0
Java仪器数据文件解析-PDF文件
如何把windows上的文件以web的形式发布出去
这种方式适用于同一局域网内,并且还要安装python,在一切都准备好之后,便可以使用以下命令来从别的电脑下载我们主机上的文件了
dogfei
2020/07/31
1.1K0
如何使用 Go 语言来查找文本文件中的重复行?
在编程和数据处理过程中,我们经常需要查找文件中是否存在重复的行。Go 语言提供了简单而高效的方法来实现这一任务。在本篇文章中,我们将学习如何使用 Go 语言来查找文本文件中的重复行,并介绍一些优化技巧以提高查找速度。
网络技术联盟站
2023/07/03
2600
如何使用 Go 语言来查找文本文件中的重复行?
读取除#开头的行的文件
f = open('读取测试文件.txt', 'r', encoding='utf-8') n = open('读取测试文件存储文件.txt', 'w', encoding='utf-8') text = f.readlines() print(text) # 遍历所有行 for i in text: # 便利一行 for flag in range(len(i)): # 如果从第一个位置开始是空格则跳过这个字符往后继续遍历,直到这行结束 if i[flag]
汪凡
2018/05/29
1.7K0
linux下提取日志文件中的某一行JSON数据中的指定Key
今天在定位问题时,通过日志打印出来调用第三方接口的返回结果对象的值,但因为这个返回信息太多,导致日志打印时对应的这行日志翻了四五屏才结束,这种情况下不好复制粘贴出来去具体分析返回结果对象,主要是我们需要针对返回的json对象提取对应的key去进行分析查询。
翎野君
2023/05/12
5.3K0
点击加载更多

相似问题

解析csv文件以填充数据库

23

解析文件以设置对象的数据-设计问题

50

如何解析目录中的每个html文件以获取图像?

32

解析XML文件以填充C /C++中的结构

43

解析每个文件夹以提取python中的信息

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文