2016-06-27 57 views
2

ファイルに保存するためにArrayListを取得しようとしています。私はそれがテキストファイルを作成しているのを見ることができますが、何もテキストファイルの中に置かれています、ただ空白です。ArrayListをテキストファイルに保存する

ここにArrayListのメインコードがあります。保存するオプション付きのスイッチです。

static int input, selection, i = 1; 
static ArrayList<Animals> a; 

// Main Method 
public static void main(String[] args){ 

    // Create an ArrayList that holds different animals 
    a = new ArrayList<>(); 
    a.add(new Animals(i++, "Bear", "Vertebrate", "Mammal")); 
    a.add(new Animals(i++, "Snake", "Invertebrate", "Reptile")); 
    a.add(new Animals(i++, "Dog", "Vertebrate", "Mammal")); 
    a.add(new Animals(i++, "Starfish", "Invertebrates", "Fish")); 

    while (true) { 
     try { 
      System.out.println("\nWhat would you like to do?"); 
      System.out.println("1: View List\n2: Delete Item\n3: Add Item\n4: Edit Item\n5: Save File\n0: Exit"); 
      selection = scanner.nextInt(); 
      if(selection != 0){ 
       switch (selection) { 
        case 1: 
         ViewList.view(); 
         Thread.sleep(4000); 
         break; 
        case 2: 
         Delete.deleteItem(); 
         Thread.sleep(4000); 
         break; 
        case 3: 
         Add.addItem(); 
         Thread.sleep(4000); 
         break; 
        case 4: 
         Edit.editItem(); 
         Thread.sleep(4000); 
         break; 
        case 5: 
         Save.saveToFile("animals.txt", a); 
         Thread.sleep(4000); 
         break; 

これは私がファイルを処理するために書いたものです。ここで

import java.io.IOException; 
import java.nio.charset.Charset; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.ArrayList; 

public class Save extends ALProgram{ 
    public static void saveToFile(String fileName, ArrayList list){ 
      Path filePath = Paths.get(fileName); 
      try{ 
       System.out.println("File Saved"); 
       Files.write(filePath, list, Charset.defaultCharset()); 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 

    } 
} 

動物クラス

class Animals { 

public int id; 
public String type, vertebrate, aclass; 

public Animals(int id, String type, String vertebrate, String aclass) { 
    this.id = id; 
    this.type = type; 
    this.vertebrate = vertebrate; 
    this.aclass = aclass; 

} 

public int getID() { 
    return id; 
} 

public String getType() { 
    return type; 
} 

public String getVert() { 
    return vertebrate; 
} 

public String getaclass() { 
    return aclass; 
} 

} 
+0

'saveToFile'のための' ArrayList'パラメータでジェネリックを使用すると、問題の原因となっている 'Files.write'に型エラーが現れます。 – 4castle

+0

私は "動物"クラスを提供してください。私は解決策をお手伝いします。 – NulledCoder

+0

@NulledCoder –

答えて

3

AnimalクラスのtoStringメソッドをオーバーライドすることを確認してください:

  1. があなたのクラスはFiles.writeに渡される資格を得るためのCharSequenceを実装する必要があります。
  2. 保存時にコンテンツの表示方法を指定するには、toStringメソッドをオーバーライドする必要があります。 上記の2つの変更の後に出力が見えます。

    class Animals implements CharSequence { 
    
         public int id; 
         public String type, vertebrate, aclass; 
    
    public Animals(int id,String type,String vertebrate,String aclass) { 
    this.id = id; 
    this.type = type; 
    this.vertebrate = vertebrate; 
          this.aclass = aclass; 
         } 
    
         public int getID() { 
          return id; 
         } 
    
         public String getType() { 
          return type; 
         } 
    
         public String getVert() { 
          return vertebrate; 
         } 
    
         public String getaclass() { 
          return aclass; 
         } 
    
         @Override 
         public int length() { 
          return toString().length(); 
         } 
    
         @Override 
         public char charAt(int index) { 
          return toString().charAt(index); 
         } 
    
         @Override 
         public CharSequence subSequence(int start, int end) { 
          return toString().subSequence(start, end); 
         } 
    
         /* (non-Javadoc) 
         * @see java.lang.Object#toString() 
         */ 
         @Override 
         public String toString() { 
          return "Animals [id=" + id + ", type=" + type + ", vertebrate=" + vertebrate + ", aclass=" + aclass + "]"; 
         } 
    
    
         } 
    
+0

それは完璧に動作します、私は間違っていたことがずっと良く見えます。ありがとう! –

1

あなただけIterable<? extends CharSequence>を書くので、下記のようにあなたのコードを変更することができます。

2つの変更はあり

List<Animal> animals = new ArrayList<>(); 
    Animal a1 = new Animal(1L, "XYZ", "A2B"); 
    Animal a2 = new Animal(2L, "ABC", "IJK"); 
    animals.add(a1); 
    animals.add(a2); 
    List<String> strings = new ArrayList<>(); 
    for (Animal animal : animals) { 
     strings.add(animal.toString()); 
    } 
    Files.write(Paths.get("output.out"), strings, Charset.defaultCharset()); 
+0

この方法でファイルにハッシュを印刷します。 – kazenorin

+0

私は 'toString'を言いたいことを忘れました、ありがとう、編集された答え – Saravana

2

ので、最初のものは、あなただけの文字列にキャストして、それを保存することはできません。 各要素を取得し、文字列を作成してファイルに書き出す必要があります。 例:

public static void saveToFile(String fileName, ArrayList<Animal> list){ 

StringBuilder sb = new StringBuilder(); 

for(int i=0; i<=list.size(); i++) { 
Animal lAn = list.get(i); 
sb.Append("Animal ID: "+lAn.getID()+"; Animal type: "+lAn.getType()+"; Animal vert: "+lAn.getVert()+"; Animal aclass: "+lAn.getaclass()+"\r\n"); 
} 

try (PrintStream out = new PrintStream(new FileOutputStream(fileName))) { out.print(sb.toString()); } 

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

お試しください。 Theresは私の電話からこのコードを書いたので、間違いや誤植かもしれません。

関連する問題