Ввод файлов в Java - PullRequest
       1

Ввод файлов в Java

2 голосов
/ 10 марта 2011

Я пишу программу, которая входит в основной файл .txt и печатает определенные вещи. Это файл с разделителями-запятыми. Файл содержит 7 имен и фамилий, а также 4 цифры после. Каждый из семи на отдельной строке. Каждая строка выглядит так: George Washington, 7, 15, 20, 14. Программа должна захватить фамилию и затем усреднить 4 числа, а также усреднить первое из всех семи, второе из всех семи и т. Д. Я не уверен, как начать приближаться к этому и заставить его продолжать захватывать и печатать что нужно Спасибо за любую помощь. Я ценю это.

Ответы [ 6 ]

2 голосов
/ 10 марта 2011

Подсказка:

Учебник:

Извлечение релевантности из учебника:

Чтобы использовать другой разделитель токенов, вызовите useDelimiter(), указав регулярное выражение,Например, предположим, что вы хотите, чтобы разделителем токенов была запятая, за которой необязательно следует пробел.Вы бы призвали,

s.useDelimiter(",\\s*");
1 голос
/ 10 марта 2011

Скрипт:

public static void main(String[] args) throws IOException {
    int[][] numbers = new int[7][4];
    String[] names = new String[7];
    BufferedReader reader = new BufferedReader(new FileReader("datafile"));
    String line;
    int row = 0;
    while ((line = reader.readLine()) != null) {
        String[] cells = line.split(",");
        names[row] = cells[0].trim();
        for (int i = 1; i < cells.length; i++) {
            numbers[row][i - 1] = Integer.parseInt(cells[i].trim());
        }
        row++;
    }
    for (int i = 0; i < names.length; i++) {
        System.out.printf("%s, %.2f%n", names[i], avg(numbers[i]));
    }
    // Do the other average calculation
}
private static double avg(int[] numbers) {
    int sum = 0;
    for (int i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }
    return sum / numbers.length;
}
0 голосов
/ 10 марта 2011
File file = new File("C:\\data.txt");
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;

try {
  fis = new FileInputStream(file);

  // Here BufferedInputStream is added for fast reading.
  bis = new BufferedInputStream(fis);
  dis = new DataInputStream(bis);

  // dis.available() returns 0 if the file does not have more lines.
  while (dis.available() != 0) {

    /* Read the content from file */
    /* Read a line and check if first element before first comma is a string */
    /* Read four numbers separated by comma after first comma in an arraylist */
    /* Loop around array list to get the average of numbers */
    /* Store the first number from this record in another vector */

    System.out.println(dis.readLine());
  }

  // dispose all the resources after using them.
  fis.close();
  bis.close();
  dis.close();

} catch (FileNotFoundException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
0 голосов
/ 10 марта 2011

Есть несколько вещей, которые следует учитывать:

Файлы на вашем диске хранятся в виде последовательности байтов , но при обработке текста вам нужны последовательности из символов .Поэтому при загрузке файла вам необходимо конвертировать байты в символы.Это может быть просто сделано с использованием этих трех типов:

FileInputStream fis = new FileInputStream("data.txt");
Reader rd = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader brd = new BufferedReader(rd);

Буферный считыватель предоставляет метод readLine, который удобен для чтения входных данных построчно.

Затем вы обработаете одну строкуввода за один раз.Вы split линия во всех точках, которые состоят из некоторого пробела, запятой и пробела.Регулярное выражение для этого: "\\s*,\\s*".

Теперь у вас есть массив полей.Первое поле - это имя, которое вы можете использовать как есть.Остальные поля необходимо преобразовать в целые числа, что можно сделать с помощью Integer.valueOf(String).

Когда вы прочитали все строки, вы должны закрыть файл.

0 голосов
/ 10 марта 2011

Я бы лично порекомендовал посмотреть на метод split для строк (чтобы можно было разбить строку на массив строк) или stringTokenizer, как предложил Брайан.

Остальное - просто вычисления и массивхранить его в.

0 голосов
/ 10 марта 2011

Подсказка:

  • BufferedReader.readLine()
  • StringTokenizer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...