Как мне обновить файл, используя ArrayList, Java

1

Я пишу метод, который будет принимать в некоторых аргументах командной строки, проверять их, и если действительный будет редактировать код аэропорта. Название аэропорта и его код хранятся в CSV файле. Примером может служить "Белфаст, БХД". Аргументы командной строки вводятся следующим образом: java editAirport EA BEL Belfast, "EA" - это код с 2-мя символами, который заставляет проект знать, что я хочу изменить код для аэропорта, "BEL" - это новый код, а Belfast - это название аэропорта. Когда я проверил cla и подтвердил их, я прочитал файл и сохранил их в ArrayList как "Belfast, BEL". Затем я хочу обновить текстовый файл, удалив строки из текстового файла и сбросив в arraylist, но я не могу понять, как это сделать. Может ли кто-нибудь показать мне способ, используя простой код (без передовых java файлов), как это возможно. Вот моя программа

    import javax.swing.*;
    import java.io.*;
    import java.util.*;
    import java.text.*;
    public class editAirport
    {
      public static void main(String [] args)throws IOException
      {
        String pattern = "[A-Z]{3}";
        String line, line1, line2;
        String[] parts;
        String[] parts1;
        boolean found1 = false, found2 = false;
        File file = new File("Airports.txt"); // I created the file using the examples in the outline
        Scanner in = new Scanner(file);
        Scanner in1 = new Scanner(file);
        Scanner in2 = new Scanner(file);
        String x = args[0], y = args[1], z = args[2];
        //-------------- Validation -------------------------------
        if(args.length != 3) // if user enters more or less than 3 CLA didplay message
          JOptionPane.showMessageDialog(null, "Usage: java editAirport EA AirportCode(3 letters) AirportName");
        else if(!(file.exists())) // if "Airports.txt" doesn't exist end program
            JOptionPane.showMessageDialog(null, "Airports.txt does not exist");
        else // if everything is hunky dory
        {
          if(!(x.equals("EA"))) //if user doesn't enter EA an message will be displayed
             JOptionPane.showMessageDialog(null, "Usage: java editAirport EA AirportCode(3 letters) AirportName");
          else if(!(y.matches(pattern))) // If the code doesn't match the pattern a message will be dislayed
            JOptionPane.showMessageDialog(null, "Airport Code is invalid");

          while(in.hasNext())
          {
             line = in.nextLine();
             parts = line.split(",");
             if(y.equalsIgnoreCase(parts[1]))
                found1 = true;  //checking if Airport code already is in use
             if(z.equalsIgnoreCase(parts[0]))
                found2 = true; // checking if Airport name is in the file
          }
          if(found1)
            JOptionPane.showMessageDialog(null, "Airport Code already exists, Enter a different one.");
          else if(found2 = false)
            JOptionPane.showMessageDialog(null, "Airport Name not found, Enter it again."); 
          else

            /*
            Creating the ArrayList to store the name,code.
            1st while adds the names and coses to arraylist, 
            checks if the name of the airport that is being edited is  in the line,
            then it adds the new code onto the name.
            sorting the arraylist.
            2nd for/while is printing the arraylist into the file
            */
            ArrayList<String> airport = new ArrayList<String>();
            while(in1.hasNext()) // 1st while
            {
                line1 = in1.nextLine();
                if(line1.contains(z))
                {
                    parts1 = line1.split(",");
                    parts1[1] = y;
                    airport.add(parts1[0] + "," + parts1[1]);
                }
                else
                    airport.add(line1);
            }
            Collections.sort(airport); // sorts arraylist
            FileWriter aFileWriter = new FileWriter(file, true);
            PrintWriter output = new PrintWriter(aFileWriter);
            for(int i = 0; i < airport.size();)
            {
                while(in2.hasNext()) // 2nd while
                {
                    line2 = in2.nextLine();
                    line2 = airport.get(i);
                    output.println(line2);
                    i++;
                }
            }
            output.close();
            aFileWriter.close();    
        }   
    }
}

}

Файл Airports.txt - это

    Aberdeen,ABZ
    Belfast City,BHD 
    Dublin,DUB 
    New York,JFK 
    Shannon,SNN 
    Venice,VCE
  • 0
    Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что это вопрос типа "может ли кто-нибудь показать мне код" домашней работы-дампа.
  • 1
    как это не по теме !! Мне нужна помощь с серьезной проблемой, с которой я столкнулся пару дней, и я нигде не могу найти решения
Показать ещё 3 комментария
Теги:
arraylist

1 ответ

0

Я думаю, что ваша проблема может заключаться в двух строках:

line2 = in2.nextLine();
line2 = airport.get(i);

это перезапишет 'line2' в памяти, но не в файле.

  • 0
    Да, есть ли способ перезаписать фактическую строку в файле
  • 0
    Не так, как вы, кажется, пытаетесь это сделать - вы не можете просто сказать «установить строку x в значение s». Вы должны снова записать весь файл, и там, где вы попадаете на строку, которую хотите заменить, выведите эту строку вместо той, которую вы только что прочитали.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню