簡體   English   中英

我正在嘗試讀取文本文件並將其存儲在對象數組列表中

[英]I'm trying to read a text file and store it in an arraylist of objects

我正在嘗試讀取文本文件並將其存儲在對象的數組列表中,但我不斷收到錯誤消息,提示我無法將字符串轉換為項目,這是我正在使用的數組列表類型。 我嘗試了各種解決方案,但我不太確定它是如何完成的。 我是編碼新手,很快就要完成這項任務。 什么都有幫助!

private void loadFile(String FileName)
{
    Scanner in;
    Item line;

    try
    {
        in = new Scanner(new File(FileName));
        while (in.hasNext())
        {
            line = in.nextLine();
            MyStore.add(line);

        }
        in.close();
    }
    catch (IOException e)
    {
        System.out.println("FILE NOT FOUND.");
    }
}

我很抱歉沒有添加 Item 類

public class Item
{
private int myId;
private int myInv;

//default constructor
public Item()
{
    myId = 0;
    myInv = 0;
}

//"normal" constructor
public Item(int id, int inv)
{
    myId = id;
    myInv = inv;
}

//copy constructor
public Item(Item OtherItem)
{
    myId = OtherItem.getId();
    myInv = OtherItem.getInv();
}

public int getId()
{
    return myId;
}

public int getInv()
{
    return myInv;
}

public int compareTo(Item Other)
{
    int compare = 0;

    if (myId > Other.getId())
    {
        compare = 1;
    }
    else if (myId < Other.getId())
    {
        compare = -1;
    }
    return compare;
}

public boolean equals(Item Other)
{
    boolean equal = false;

    if (myId == Other.getId())
    {
        equal = true;;
    }
    return equal;
}

public String toString()
{
    String Result;

    Result = String.format("%8d%8d", myId, myInv);

    return Result;
}
}

這是我的arraylist 的創建。 私有ArrayList MyStore = new ArrayList();

這是我的文本文件的示例。

3679 87

196 60

12490 12

18618 14

2370 65

in.nextLine()返回一個String 因此,您不能將in.nextLine()分配給Item的實例。

您的代碼可能需要更正為:

    List<String> myStore = new ArrayList<String>();

    private void loadFile(String FileName)
    {
        Scanner in;

        try
        {
            in = new Scanner(new File(FileName));
            while (in.hasNext())
            {
                myStore.add(in.nextLine());
            }
            in.close();
        }
        catch (IOException e)
        {
            System.out.println("FILE NOT FOUND.");
        }
    }

如果您想在讀取文件后獲得Item列表,則需要提供將給定信息行轉換為Item實例的邏輯。

假設您的文件內容采用以下格式。

id1,inv1
id2,inv2
.
.

然后,您可以使用Item類型,如下所示。

    List<Item> myStore = new ArrayList<Item>();

    private void loadFile(String FileName)
    {
        Scanner in;

        String[] line;

        try
        {
            in = new Scanner(new File(FileName));
            while (in.hasNext())
            {
                line = in.nextLine().split(",");
                myStore.add(new Item(line[0], line[1]));
            }
            in.close();
        }
        catch (IOException e)
        {
            System.out.println("FILE NOT FOUND.");
        }
    }
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.rosmery;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Sem-6-INGENIERIAINDU
 */
public class aaa {
    public static void main(String arg[]) throws FileNotFoundException, IOException{
        BufferedReader files=new BufferedReader(new FileReader(new File("")));
        List<String> dto=new ArrayList<>();
        String line;
        while((line= files.readLine())!= null){
            line= files.readLine();
            dto.add(line);
            //Hacer la logica para esos datos
        }
    }
}

一種可能的解決方案(假設文件行中的數據用逗號分隔),使用流:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) throws IOException {
        List<Item> items = loadFile("myfile.txt");
        System.out.println(items);
    }

    private static List<Item> loadFile(String fileName) throws IOException {
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            return stream
                    .map(s -> Stream.of(s.split(",")).mapToInt(Integer::parseInt).toArray())
                    .map(i -> new Item(i[0], i[1]))
                    .collect(Collectors.toList());
        }
    }
}

或使用 foreach:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) throws IOException {
        List<Item> items = new ArrayList<>();
        for (String line : loadFile("myfile.txt")) {
            String[] data = line.split(",");

            int id = Integer.parseInt(data[0]);
            int inv = Integer.parseInt(data[1]);
            items.add(new Item(id, inv));
        }
        System.out.println(items);
    }

    private static List<String> loadFile(String fileName) throws IOException {
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            return stream.collect(Collectors.toList());
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM