2016-08-11 4 views
0

У меня есть текстовый файл, который выглядит следующим образомJava чтение текстового файла из пользовательского ввода и вывода данных в соответствии с пользовательского ввода

BEG#Belgrave#19 February 1962 
FSS#Flinders Street#12 September 1854 
TSN#Tecoma#1 February 1924 

им пытаются написать программу, задавая пользователю ввести имя файла (я могу выполните эту часть), тогда пользователю будет предложено ввести «Код». Затем программа должна прочитать txt-файл и выводить информацию по уникальному коду. , например:

Java коды

Укажите название файла >> stationsMaster.txt

Введите код станции >> FSS

Название станции: "Обломки" имеет код "FSS" дата построено: 12 сентября 1854 года

вот код того, что я сделал до сих пор, им действительно зациклился на том, как писать t он код, чтобы программа считывала текстовый файл и выводила соответствующую информацию из пользовательского ввода.

import java.util.*; 
import java.io.*; 
public class Codes 
{ 
public static void main (String [] args) throws IOException 
{ 
Scanner keyboard = new Scanner (System.in); 
System.out.print("Enter File Name"); 
String filename = keyboard.nextLine(); 
File f = new File (filename); 
Scanner fin = new Scanner (f); 
String stationcode = fin.nextLine(); 
String stationname = fin.nextLine(); 
String date = fin.nextLine(); 


while (fin.hasNextLine ()) 
{ 

System.out.print (date); 
System.out.print(stationname); 

} 

fin.close(); 

} 
+2

Всегда старайтесь, чтобы сломать вашу большую проблему в много мелких проблем. В этом случае вам нужно знать, как читать файл по строкам, затем разделять строку на каждом «#» и сравнивать коды станций. Если коды совпадают, выведите все данные о станции. – Skynet

ответ

1

Вы можете попробовать что-то вроде этого: надеюсь, что это может решить вашу проблему

public class Test { 
    private Map<String, Station> stationMap = new HashMap<>(); 

    public static void main(String[] args) throws Exception { 
     // first read the file and store the data to the map 
     Test test = new Test(); 
     test.readFile(); 

     // now ask the user for the station code 
     Scanner scanner = new Scanner(System.in); 
     while (true) { 
      System.out.println("Please enter the code: "); 
      String code = scanner.nextLine(); 
      Station station = test.stationMap.get(code.toUpperCase()); 
      if (station == null) { 
       System.out.println("There is no such station present fot this code!"); 
       continue; 
      } 
      System.out.println("Station name: "+station.getName()); 
      System.out.println("Station code: "+station.getCode()); 
      System.out.println("Station built date: "+station.getBuiltDate()); 
     } 
    } 

    private void readFile() { 
     try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("path/to/file")))) { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       String[] strs = line.split("#"); 
       Station station = new Station(strs[0], strs[1], strs[2]); 
       stationMap.put(station.getCode().toUpperCase(), station); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private class Station { 
     private String name; 
     private String code; 
     private String builtDate; 

     public Station(String name, String code, String builtDate) { 
      this.name = name; 
      this.code = code; 
      this.builtDate = builtDate; 
     } 

     public String getName() { 
      return name; 
     } 

     public String getCode() { 
      return code; 
     } 

     public String getBuiltDate() { 
      return builtDate; 
     } 
    } 

} 
+0

ah спасибо, да, но я сказал, что мне нужно написать его, не используя bufferReader, im, ограниченный для методов класса строк, я думал, что это может иметь какое-то отношение к использованию подстрок, indexOf – adam

+0

@adam В любом случае вам все нужно читать файл, то почему вы не читаете только один раз, а затем получаете доступ к данным из ОЗУ, а не из файла HD. он быстрее, чем вы хотите. –

Смежные вопросы