Я пытаюсь прочитать текстовый файл и сохранить его в массиве объектов - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь прочитать текстовый файл и сохранить его в массиве объектов, но получаю сообщение об ошибке, в котором говорится, что я не могу преобразовать строку в элемент, который является типом массива, который я использую. Я пробовал различные решения, но не совсем уверен, как это должно быть сделано. Я новичок в кодировании и скоро должен получить это задание. Что-нибудь помогает!

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;
}
}

Это создание моего архива. private ArrayList MyStore = new ArrayList ();

Вот пример моего текстового файла.

3679 87

196 60

12490 12

18618 14

2370 65

Ответы [ 3 ]

0 голосов
/ 29 февраля 2020
/*
 * 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
        }
    }
}
0 голосов
/ 29 февраля 2020

Одно из возможных решений (при условии, что данные в строках файла разделены запятой) с использованием потоков:

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());
        }
    }
}
0 голосов
/ 29 февраля 2020

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 после прочтения файла вам необходимо предоставить логи c, которые преобразуют данную строку информации в экземпляр 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.");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...