Программа создания заметок ArrayList и BufferedReader

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

Класс примечания

import java.util.*;
public class Notes
{ 
    private String notes;
    private String titleOfNotes;
    Scanner input = new Scanner(System.in);

    public Notes()
    {
        titleOfNote(input);
        takeNotes(input);
    }

    public void takeNotes(Scanner x)
    {
        System.out.println("Please Enter Your Note");
        notes = x.nextLine();
    }

    public void titleOfNote(Scanner y)
    {   
        System.out.println("Please Enter Title");
        titleOfNotes = y.nextLine();
    }
    public String toString()
    {
        return "Title: " + titleOfNotes + "\t" + notes; 
    }

}

App Class // выполняет большую часть работы

import java.util.*;
import java.io.*;
public class App
{
    private int exit = 0; 
    private int createANote;
    private int displayTheNotes; 
    private int inputFromUser;
    public boolean haveFileBeenWritten = true;

    File file = new File("Notes.txt");

    Scanner input = new Scanner(System.in);

    ArrayList<Notes> arrayOfNotes = new ArrayList<Notes>();

    public void makeNoteObject()
    {
        arrayOfNotes.add(new Notes());  
    }

    public void displayAllTheNote(ArrayList<Notes> n)
    {
            for(Notes singleObjectOfNote : n)
            {
                System.out.println(singleObjectOfNote);
            }
    }

    public void programUI(){


        while(exit != 1)
        {   
            System.out.println("1. Create A Note");
            System.out.println("2. Display The Notes");
            System.out.println("3. Exit");
            System.out.println("4. Export to text file");
            System.out.println("Enter Your Operation");
            inputFromUser = input.nextInt();

            if(inputFromUser == 1)
            {
                makeNoteObject();
            }
            else if(inputFromUser == 2)
            {
                displayAllTheNote(arrayOfNotes);
            }
            else if(inputFromUser == 3)
            {   
                System.out.println("Exited");
                exit = 1;
            }
            else if(inputFromUser == 4)
            {
                makeATxtFileFromNotes(arrayOfNotes); 
                System.out.println("Textfile created filename: " + file.toString()); 
            }
            else
            {
                System.out.println("You Select A Invalid Command");
            }
        }
    }

    public void makeATxtFileFromNotes(ArrayList<Notes> x)
    {

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(file,haveFileBeenWritten)))
        {
//Problem here!
            for(Notes singleObjectOfNotes : x)
            {
                bw.write(singleObjectOfNotes.toString());
                bw.newLine(); 
            }


        }catch(IOException e)
        {
            System.out.println("Cant Write File: " + file.toString());
            haveFileBeenWritten = false;
        }
    }

    public App()
    {
        programUI();
    }
    public static void main(String[]args)
    {
        App objectOfApp = new App();

    }
}

Я новичок в Java, поэтому мой код не может быть лучшим!

1 ответ

Решение

Если ваша проблема в том, что вам нужно увидеть только текущий список Notes исключая предыдущий ', это из-за этой строки:

try (BufferedWriter bw = new BufferedWriter(new FileWriter(file,haveFileBeenWritten)))

По умолчанию, haveFileBeenWritten является true поэтому на основе API FileWriter он ПРИЛОЖИТ к существующему файлу Notes.txt так что если вы не хотите этого, измените его на false,

Параметры:

file - объект File для записи в

append - если true, тогда байты будут записаны в конец файла, а не в начало

РЕДАКТИРОВАТЬ: для доступа List<> элементы, использование get(),

Пример:

int size = myList.size();
for (int i = 0 ; i < size ; i++) {
    //...
    Notes note = myList.get(i);
    //...
}
Другие вопросы по тегам