2013-07-28 2 views
0

Я пытаюсь выполнить печать из файла .rtf, но похоже, что инструкция my if нарушена. Кажется, что раскол не работает, потому что, если я поставлю состояние печати, выход просто выходит как первая строка печати, которая сообщает пользователю, какую песню они ищут, а затем тексты песен, которые неформатированы. Помимо этого, код просто прокручивается через цикл while. Похоже, что он не находит песню, когда попадает if(line.contains(song)){. На данный момент я просто жестко определяю местоположение файла, но когда я его заработаю, я сделаю метод используемым пользователем.bufferedReader не печатает файл

Любая помощь будет оценена по достоинству.

public static void main(String[] args){ 
    lyricsSearch("/Users/adam/Documents/Final/BlackDahliaMurder/", "miasma.rtf"); 
} 

public static void lyricsSearch(String artist, String song){ 
    try { 
     String stringSearch = song; 
     // Opens the album file as a buffered reader 
     BufferedReader bf = new 
     BufferedReader(new FileReader("/Users/adam/Documents/Final/BlackDahliaMurder/miasma.rtf")); 

     // Let the user know what we are searching for 
     System.out.println("Searching for " + song + "..."); 

     // Loop through each line, parsing. 
     String line; 

     while ((line = bf.readLine()) != null){ 
      System.out.println(line); 
      if (line.contains(song)){ 
       String[] songInfo = line.split("\\|"); 
       System.out.println(Arrays.toString(songInfo)); 
      }  
     } 
     bf.close(); 
    } 
    catch (IOException e) { 
     System.out.println("IO Error Occurred: " + e.toString()); 
    } 
} 
+0

Работает ли код, когда вы используете его в текстовом формате .txt, а не в файле .rtf? – denisw

+0

Он работает лучше в том, что обратная косая черта исчезла, но если я оставлю код, как он выше, весь файл будет напечатан вместо того, чтобы останавливаться на |. Если я меняю его на if (line.toLowerCase(). Содержит (песня)) { 'он печатает только одну строку файла с именем песни на нем. Файл организован следующим образом: «Название песни: lyrics | другое название песни: lyrics |». – Adam

ответ

0

Организация файла должна быть правильной. Все песни в альбоме были в одном файле. Песни должны начинаться с трубы, и каждая строка должна заканчиваться другим каналом. Ключ состоит в том, чтобы не иметь разрывов строк в файле.

import java.util.Arrays; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class Experiment { 

private int artist; 
private String album; 
private String song; 
private String aaa = "/Users/adam/Documents/Final/AngelsAndAirwaves/"; 
private String bdm = "/Users/adam/Documents/Final/BlackDahliaMurder/"; 
private String naf = "/Users/adam/Documents/Final/NakedAndFamous/"; 
private String awn = "/Users/adam/Documents/Final/AWOLNATION/"; 


    public static void lyricsSearch(int artist, String album, String song) { 
     String userArtistChoice = null; 
     album.toLowerCase(); 
     song.toLowerCase(); 
     try { 

      if (artist == 0){ 
       userArtistChoice = "/Users/adam/Documents/Final/AngelsAndAirwaves/"; 
      } 
      else if (artist == 1){ 
       userArtistChoice = "/Users/adam/Documents/Final/BlackDahliaMurder/"; 
      } 
      else if (artist == 2){ 
       userArtistChoice = "/Users/adam/Documents/Final/NakedAndFamous/"; 
      } 
      else if (artist == 3){ 
       userArtistChoice = "/Users/adam/Documents/Final/AWOLNATION/"; 
      } 
      else 
       System.out.println("that i'n't right...."); 

      String stringSearch = song; 
      // Opens the album file as a buffered reader 
      BufferedReader bf = 
       new BufferedReader(new FileReader(userArtistChoice + album + ".txt")); 

      // Let the user know what we are searching for 
      System.out.println("Searching for " + song + "..."); 

      String line; 
      //loop through each line, parsing  
      while ((line = bf.readLine()) != null){ 
       //print the song. each | delimits a string. song stops at carriage return. 
       if (line.toLowerCase().contains(song)){ 
        String[] songInfo = line.split("\\|"); 
        for(String el : songInfo) { 
        System.out.println(el); 
       } 

      } 
     } 
     bf.close(); 
     } 
     catch (IOException e) { 
      System.out.println("IO Error Occurred: " + e.toString()); 
     } 
    } 
} 
0
lyricsSearch("/Users/adam/Documents/Final/BlackDahliaMurder/", "miasma.rtf"); 

Глядя на подпись lyricsSearch, вы, кажется, ищет песню под названием «miasma.rtf» - я думаю, что это не ваше намерение. :)

В противном случае код выглядит нормально.

+0

Я действительно ищу эту песню в файле. С тех пор я изменил его на .txt, потому что он печатает не \ where .rtf. Проблема в том, что раскол не нашел моих разделителей. Если я перехожу к этому 'if (line.toLowerCase(). Содержит (песня)) {', он печатает только одну строку с названием песни в ней. Файл .txt организован таким образом: «| song name: lyrics | | другое название песни: lyrics |». – Adam

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