所以我有点茫然,我知道如何在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();
}
我认为这可能会在某个地方接近,但我不确定......
任何帮助都会很棒。
答案 0 :(得分:0)
您希望将该离散的工作部分封装到一个函数中并交回结果。我建议:
public ArrayList<String> loadCards() throws IOException {
...
return list;
}
在你的for循环中,你有一个值是你的gif的基本名称,对吧?所以value + ".gif"
是你想要的文件名。只需将其添加到循环内的列表中即可。作为最佳做法,请为变量使用较低的名称,因此value
和suite
,而不是Value
和Suite
。
答案 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()方法