2017-04-01 19 views
0

私は、txtファイルに注文を書き込むjavafxアプリケーションを作成しました。その後、txtファイルをテキストエリアに読み込んでいます。 私のコードが動作していて、ファイルを印刷していますが、私はそれをcorectlyでどのようにフォーマットするのか分かりません。私はそれを間違って書いていますか?任意のヘルプが評価されますテキストファイルに書き込んでからテキストエリアに読み返すjavafx

これは、ファイルに書き込むコードの主要部分です。

Date date = new Date(); 
     SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 

    BufferedWriter bf = new BufferedWriter(new FileWriter("receipt.txt")); 
    bf.write("*************SHERIDAN BAGEL SHOP*************,"); 
    bf.newLine(); 
    bf.write(ft.format(date)); 
    bf.newLine(); 
    bf.write("Item:\t\t\tQty\tAmount,"); 
    bf.newLine(); 
bf.write("\t\t\t\t-----------"); 
     bf.newLine(); 
     bf.write("Pretax Total\t\t\t$"+df.format(cost)+","); 
     bf.newLine(); 
     bf.write("Sales Tax 13%\t\t\t$"+df.format(calctax)+","); 
     bf.newLine(); 
     bf.write("Total Sale\t\t\t$"+df.format(calctotal)+","); 
     bf.newLine(); 
     bf.write("*********THANK YOU FOR YOUR ORDER*********,"); 

     bf.close(); 

これは、このファイルを読み取るコード

@FXML 
    private TextArea receipt; 

public void ViewReceipt() { 
    try { 
     Scanner s = new Scanner(new File("receipt.txt")); 
     while (s.hasNext()) { 
      receipt.appendText(s.nextLine()+"\n"); 
     } 
    } catch (FileNotFoundException ex) { 
     System.err.println(ex); 
    } 


} 

テキストファイルで出力

*************SHERIDAN BAGEL SHOP*************, 
Sat 2017.04.01 at 01:06:57 PM EDT 
Item:   Qty  Amount, 
         ----------- 
Pretax Total   $0.00, 
Sales Tax 13%   $0.00, 
Total Sale    $0.00, 
*********THANK YOU FOR YOUR ORDER*********, 

である。これは、それがテキストエリアに

*************SHERIDAN BAGEL SHOP*************, 
Sat 2017.04.01 at 01:06:57 PM EDT 
Item:   Qty Amount, 
       ----------- 
Pretax Total   $0.00, 
Sales Tax 13%   $0.00, 
Total Sale   $0.00, 
*********THANK YOU FOR YOUR ORDER*********, 
ある方法です
+0

;?私はファイルから行を読み込み、その行をtextAreaに追加します。なぜそれがまったく同じではないのか分かりません。 .useDelimiterを削除し、appendText(s.next())を変更します。 appendText(s.nextLine()): – Sedrick

+0

私はそれを試みましたが、すべてを1行に印刷します。 –

+0

私はファイルへの書き込み方法を信じています。 –

答えて

0

これで遊ぶことができます。すべての領収書が非常に似ている場合。コードを更新しました

import java.io.*; 
import java.text.*; 
import java.util.*; 
import java.util.logging.*; 
import javafx.application.*; 
import javafx.event.*; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.*; 

/** 
* 
* @author Sedrick 
*/ 
public class JavaFXApplication22 extends Application { 

    TextArea textArea; 

    @Override 
    public void start(Stage primaryStage) 
    { 
     textArea = new TextArea(); 

     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) 
      { 
       Date date = new Date(); 
       SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 
       String pattern = "$###,###.###"; 
       DecimalFormat df = new DecimalFormat(pattern); 

       try (BufferedWriter bf = new BufferedWriter(new FileWriter("receipt.txt"))) 
       { 
        bf.write("*************SHERIDAN BAGEL SHOP*************,"); 
        bf.newLine(); 
        bf.write(ft.format(date)); 
        bf.newLine(); 
        bf.write(writeSpace(25, "Item:") + writeSpace(12, "Qty") + "Amount,"); 
        bf.newLine(); 
        bf.write(writeSpace(35, "") + "-----------"); 
        bf.newLine(); 
        bf.write(writeSpace(35, "Pretax Total") + df.format(100.0) + ","); 
        bf.newLine(); 
        bf.write(writeSpace(35, "Sales Tax 13%") + df.format(10000.0) + ","); 
        bf.newLine(); 
        bf.write(writeSpace(35, "Total Sale") + df.format(10.0) + ","); 
        bf.newLine(); 
        bf.write("*********THANK YOU FOR YOUR ORDER*********,"); 
       } 
       catch (IOException ex) 
       { 
        Logger.getLogger(JavaFXApplication22.class.getName()).log(Level.SEVERE, null, ex); 
       } 

       ViewReceipt(); 
      } 
     }); 

     VBox root = new VBox(); 
     root.getChildren().addAll(textArea, btn); 

     Scene scene = new Scene(root, 500, 500); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public void ViewReceipt() 
    { 
     try 
     { 
      Scanner s = new Scanner(new File("receipt.txt")); 
      while (s.hasNext()) 
      { 
       String line = s.nextLine(); 
       if (line.contains("$")) 
       { 
        String[] splitLine = line.split("\\s+"); 
        for (String entry : splitLine) 
        { 
         if (entry.contains("$")) 
         { 
          textArea.appendText("\t\t\t\t " + entry + "\n"); 
         } 
         else 
         { 
          textArea.appendText(entry + " "); 
         } 
        } 
       } 
       else if (line.contains("-")) 
       { 
        textArea.appendText("\t\t\t\t\t\t" + line.trim() + "\n"); 
        System.out.println(line); 
       } 
       else if (line.contains("Amount")) 
       { 
        String[] splitLine = line.split("\\s+"); 
        textArea.appendText(splitLine[0] + "\t\t\t" + splitLine[1] + "\t\t" + splitLine[2] + "\n"); 
       } 
       else 
       { 

        textArea.appendText(line + "\n"); 
       } 
      } 
     } 
     catch (FileNotFoundException ex) 
     { 
      System.err.println(ex); 
     } 
    } 

    public String writeSpace(int length, String string) 
    { 
     String spaces = ""; 

     for (int i = 0; i < length - string.length(); i++) 
     { 
      spaces += " "; 
     } 

     System.out.println(string.length() + spaces.length()); 
     return string + spaces; 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     launch(args); 
    } 

} 

!なぜあなたは.useDelimiterを( "")を使用している

enter image description here

enter image description here

+0

私はあなたが投稿したコードを試しました、それは完全にテキストファイルに印刷されますが、それでもテキストエリアにそれを読むのと同じフォーマットの問題があります。 –

+0

テキストエリアの代わりに使用できる別のコントロールがありますか? –

+0

数字だけで遊ぶだけです。 – Sedrick

関連する問題