При использовании логического метода, как мне добавить строковое содержимое текстового файла в список массивов

#java

#java

Вопрос:

Я пытаюсь использовать метод «public boolean readArtists» со сканером для чтения строк из файла и возврата true в случае успешного открытия. Предполагается, что этот метод также «добавляет в список всех исполнителей, сохраненных в переданном файле параметра».

Я видел, как написать код в общедоступном статическом методе void, который будет считывать текстовый файл и возвращать его:

 public static void main(String[] args) {

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

    String content = null;
    try {
        try (Scanner scanner = new Scanner(file, StandardCharsets.UTF_8.name())) {
            content = scanner.useDelimiter("\A").next();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    System.out.println(content);
}
  

Вот тест:

Я должен сохранить метод «public boolean readArtists(String filename), поэтому мой вопрос заключается в том, в рамках этого метода, как мне прочитать содержимое текстового файла в ArrayList с помощью сканера, а также возвращая true, если файл успешно открыт, в противном случае, обрабатывая исключение, отображаясоответствующее сообщение об ошибке, содержащее имя отсутствующего файла и возвращающее значение false.

Комментарии:

1. когда вы говорите, что успешно открыто, вы имеете в виду вернуть true, если файл существует, и false, если его нет?

2. Да, это то, что я имел в виду

Ответ №1:

 public class Artists{
public static ArrayList<String> artists = new ArrayList<String>();
public static void main(String[] args) {
    System.out.println(readArtists("filename goes here"));
    System.out.println(artists);
}
public Artists(String artist, String genre)
{
}
public static boolean readArtists(String fileName) {
    
    Scanner sc = null;
    try {
        File file = new File(fileName);
        if(file.createNewFile()) {
            System.out.println("err " fileName);
            return false;
        }
        sc = new Scanner(file);
        while(sc.hasNextLine()) {
            artists.add(sc.nextLine());
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
    if(sc!=null) {sc.close();}
    return true;
}
}
  

Этот ответ считывает данные из документа .txt в ArrayList, если имена документов .txt находятся в отдельных строках документа. Он также выводит err FILENAME и возвращает false, если документ не существует, и true, если он существует. https://www.w3schools.com/java/java_files.asp кстати, это отличный веб-сайт для изучения Java, и эта ссылка приведет вас на страницу обработки файлов.

Комментарии:

1. это работает до тех пор, пока ваш файл .txt отформатирован правильно (т. Е. каждое имя находится в отдельной строке, а не в одной непрерывной строке), вы можете изменить его для поддержки других форматов, однако я считаю, что таким образом проще копировать имена с веб-сайтов в файлы .txt

2. о, и artists это глобальная переменная

3. Я только что обновил его, теперь он должен поддерживать переменную artists

4. просто введите имя вашего файла, где написано file name goes here @ChocolateGoosePoosey

5. Никогда не видел это сообщение об ошибке: «Примечание: Artists.java использует непроверенные или небезопасные операции «.

Ответ №2:

Вы можете добиться этого с помощью,

 public static void main(String[] args) throws FileNotFoundException {
        String filepath = "C:\Users\Admin\Downloads\testFile.txt";
        List<String> arrayList = new ArrayList<>();
        
        if(readArtists(filepath)) {
            Scanner sc = new Scanner(new File(filepath));
            sc.useDelimiter("\A"); 
            while(sc.hasNext()) {
                arrayList.add(sc.next());
            }
        }
        
        System.out.println(arrayList);
    }
    
    public static boolean readArtists(String filename)
    {
       File file = new File(filename); //full path of the file with name
       return file.canRead();
    }
  

Комментарии:

1. Я вижу. Но как мне поместить содержимое этого файла в список массивов?

2. @ChocolateGoosePoosey Я обновил код, пожалуйста, ознакомьтесь с ним.