从文本文件中读取.gif文件

时间:2018-03-27 12:13:41

标签: java

所以我有点茫然,我知道如何在Java中读取和写入文本文件中的数据,但是,我已经被要求阅读来自文本文件的项目的一些GIF的名称,并将它们添加到我的程序中。

我们给出的测试代码让我们知道该怎么做:

ArrayList<String> cardStrings = new ArrayList<>();

        cardStrings.add("3h.gif");
        cardStrings.add("tc.gif");
        cardStrings.add("js.gif");
        cardStrings.add("4d.gif");
        cardTable.cardDisplay(cardStrings);

3h,tc等是你可能已经猜到的GIF的名字(在这种情况下他们是打牌)。 我尝试从中读取此数据的文本文件的结构如下:

value
suite
value
suite
value
suite
etc..

所以基本上我需要阅读前两行,将它们放入一个临时变量并放入一个&#34; .gif&#34;最后用字符串,然后将那组字符串添加到我的数组中以加载卡片。我想?

我最初尝试过以下几点:

public void loadCards() throws IOException {
    Scanner s = new Scanner(new File(file path));
    ArrayList<String> list = new ArrayList<String>();
    int pairs = Integer.parseInt(s.nextLine());
    for (int i = 0; i< pairs-1; i++) {
        String Value = s.nextLine();
        String Suite = s.nextLine();
    }
    s.close();
}

我认为这可能会在某个地方接近,但我不确定......

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

您希望将该离散的工作部分封装到一个函数中并交回结果。我建议:

public ArrayList<String> loadCards() throws IOException {
  ...
  return list;
}

在你的for循环中,你有一个值是你的gif的基本名称,对吧?所以value + ".gif"是你想要的文件名。只需将其添加到循环内的列表中即可。作为最佳做法,请为变量使用较低的名称,因此valuesuite,而不是ValueSuite

答案 1 :(得分:0)

如果我已经正确地阅读了这个,我假设一些课程作业要求你从java中的文件中读取文件名并将文件名添加到字符串数组中。

澄清一下,这是读取图像的路径而不是图像本身?

我会写几个类,如下所示:

public enum CardType {


    H("H"),C("C"),S("S"),D("D");

    private final String code;

    CardType(String code){
        this.code = code;
    }

    public String getCode(){
        return code;
    }


    public static CardType findByCode(String code) throws NotFoundException{
        for (CardType x : CardType.values()){
            if(x.getCode().equalsIgnoreCase(code)){
                return x;
            }
        }
        throw new NotFoundException();
    }
}


public class Gif {


    private String value;
    private CardType suit;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public CardType getSuit() {
        return suit;
    }

    public void setSuit(CardType suit) {
        this.suit = suit;
    }

    @Override
    public boolean equals(Object gif){
        if(gif instanceof Gif){
            return ((Gif) gif).getValue().equals(getValue());
        }
        else {
            return false;
        }
    }

    @Override
    public int hashCode(){
        return getValue().hashCode();
    }
}

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;;
import java.util.LinkedHashSet;
import java.util.Set;

public class LoadGifFiles {


    private Set<Gif> loadedFiles = new LinkedHashSet<Gif>();


    public void printList(){
        loadedFiles.stream().forEach(x -> System.out.println(x));
    }


    public void loadFromFile(String path) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(path));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();
            Integer lineCount = 0;

            Gif currentGif = new Gif();
            while (line != null) {
                lineCount++;
                if(lineCount % 2 == 0){
                    try {
                        currentGif.setSuit(CardType.findByCode(line));
                        loadedFiles.add(currentGif);
                    } catch (NotFoundException e) {
                       System.out.println("suite not known :"+line);
                    }

                }
                else {
                    currentGif = new Gif();
                    currentGif.setValue(line);
                }
            }
        } finally {
            br.close();
        }
    }
}

答案 2 :(得分:0)

此代码将不起作用,因为没有CardType.values()方法