2017-02-27 4 views
-1

だから私は、私は別々の配列項目内のすべてのレベルを書くにはどうすればよい倉庫番JAVA:このファイルを読むにはどうすればよいですか? // SCHOOL PROJECT NO EXTRAライブラリは//

; 1 

    ##### 
    # # 
    #$ # 
    ### $## 
    # $ $ # 
### # ## # ###### 
# # ## ##### ..# 
# $ $   ..# 
##### ### #@## ..# 
    #  ######### 
    ####### 
; 2 

############ 
#.. #  ### 
#.. # $ $ # 
#.. #$#### # 
#.. @ ## # 
#.. # # $ ## 
###### ##$ $ # 
    # $ $ $ $ # 
    # #  # 
    ############ 
; 

のためのレベルでテキストファイルを読み込む必要があり、私は後で区切るそれらをdesplayことができるように許可さ? 彼らは出かける必要があります。 to;しかし、行をする必要が無傷で

public class LevelReader { 
private List<String> levels; 
private final InputStream inputStream; 


public LevelReader() { 

    this.inputStream = this.getClass().getResourceAsStream("Levels.txt"); 
    this.readLevels(); 


} 


private void readLevels() { 
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { 

     List<String> lines = new ArrayList<>(); 
     String line = reader.readLine(); 
     while (line != null) { 
      line = reader.readLine(); 
      levels = new ArrayList<>(); 
      if (line.startsWith(";")) { 
       levels.addAll(lines); 
       lines.clear(); 
       System.out.println(levels); 
      } 
      lines.add(line); 

     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

}

At this moment it kinda works but i still get alotof errors 
[; 48, , #########, #*.*#*.*#, #.*.*.*.#, #*.*.*.*#, #.*.*.*.#, #*.*.*.*#, ### ###,  # #, ###### ######, #   #, # $ $ $ $ $ #, ## $ $ $ $ ##, #$ $ $ $ $#, # [email protected]$ #, # ##### #, #### #### ] 
[; 49, ,  ####,  # ##,  # ##,  # $$ ##,  ###$ $ ##, #### $ #, ### # ##### #, # # #....$ #, # # $ ....# #, # $ # #.*..# #, ### #### ### #, #### @$ ##$##,  ### $  #,  # ## #,  ######### ] 
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException 
    at Model.LevelReader.readLevels(LevelReader.java:33) 
    at Model.LevelReader.<init>(LevelReader.java:19) 
    at MainMenu.MainMenuPresenter$2.handle(MainMenuPresenter.java:51) 
    at MainMenu.MainMenuPresenter$2.handle(MainMenuPresenter.java:44) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8411) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
+1

これは私の宿題のようです。ここで質問するのではなく、Javaチュートリアルを検索してみてください。 – abbath

+0

「レベル」とは何ですか? –

答えて

0

ような何かを行うことができBufferedReaderのを使用したい場合は

Splitter lineSplitter = Splitter.on(System.getProperty("line.separator")); 
List<String> linesForLevel1 = lineSplitter.split(levelsAsString.get(0)); 

Guava documentation

+0

を受け入れてください。 (私は私が作ったものを更新してプリントとして受け取った –

+0

あなたが私の答えが好きだったら、それを受け入れるべきです、チェックマーク;-)をクリックしてください。 – rli

0

使用グアバのスプリッタは、車輪の再発明はありません。

ファイルを文字列に読み込んだ後、分割します。あなたのファイルは大きすぎるべきではないので、それを文字列に読み込むことができるはずです。

あなたは基本的にスプリッタをインポートし、このように定義するGoogleのグアバライブラリと

List<String> levelsAsString = Splitter.on(',').split(fileAsString); 

その後、あなたは文字列としてすべてのレベルを持っています。あなたが行のリストに読んで試してみてくださいあなたはこの

FileInputStream fis = new FileInputStream("C:/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); 
String line = reader.readLine(); 

List<String> list = new ArrayList<String>(); 
while((line != null){ 
    list.add(line); 
    line = reader.readline 
} 
+0

Googleグアバは使用できません:/ –

+0

あなたの質問では、これは学校のプロジェクトだとは言いませんでした。これは現在の質問に対する有効な回答です。 質問を編集して、ライブラリを使用できないことを明確にし、その理由を説明してください。 – abbath

+0

申し訳ありません最初の時間:/ –

2

:その後、あなたはそれが行ずつ分割することができます;セパレータラインに遭遇するたびに、新しいレベルを放出してください。

Sth。このように:

 List<String> lines = new ArrayList<>(); 
     while (line != null) { 
      String[] level = ; 
      line = reader.readLine(); 
      if (line.startsWith(";")) { 
       levels.add(new Level(lines)); 
       lines.clear(); 
      } 
      else { 
       lines.add(line); 
      } 
     } 
+0

真ですが、1行に1行しか読み込まないので、別のレベルに到達するまで複数の行を読み込む必要があります。 例えば、sout(list.get 3をレベル全体に出力したい場合)の場合 –

+1

この作品はありましたか?これはあなたが探していたものですか? もしそうなら、私の答えは –

関連する問題