写入文本文件,然后将其读回textarea javafx

写入文本文件,然后将其读回textarea javafx,javafx,scenebuilder,Javafx,Scenebuilder,我制作了一个javafx应用程序,将订单写入txt文件,然后我将txt文件读入文本区域。 我的代码正在运行,正在打印文件,但我不知道如何正确格式化它。我是javafx的noob,我写错了吗?谢谢你的帮助 这是写入文件的代码的主要部分 Date date = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); BufferedWriter bf

我制作了一个javafx应用程序,将订单写入txt文件,然后我将txt文件读入文本区域。 我的代码正在运行,正在打印文件,但我不知道如何正确格式化它。我是javafx的noob,我写错了吗?谢谢你的帮助

这是写入文件的代码的主要部分

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();
这是文本文件中的输出

*************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*********,
这是读取文件的代码

@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*********,

你可以玩这个。如果所有的收据看起来都很相似

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);
    }

}
import java.io.*;
导入java.text.*;
导入java.util.*;
导入java.util.logging.*;
导入javafx.application.*;
导入javafx.event.*;
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.layout.*;
导入javafx.stage.*;
/**
*
*@作者塞德里克
*/
公共类JavaFXApplication22扩展了应用程序{
text区域text区域;
@凌驾
公共无效开始(阶段primaryStage)
{
textArea=新textArea();
按钮btn=新按钮();
btn.setText(“说‘你好,世界’”);
btn.setOnAction(新的EventHandler


你可以玩这个。如果所有的收据看起来都很相似的话

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);
    }

}
import java.io.*;
导入java.text.*;
导入java.util.*;
导入java.util.logging.*;
导入javafx.application.*;
导入javafx.event.*;
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.layout.*;
导入javafx.stage.*;
/**
*
*@作者塞德里克
*/
公共类JavaFXApplication22扩展了应用程序{
text区域text区域;
@凌驾
公共无效开始(阶段primaryStage)
{
textArea=新textArea();
按钮btn=新按钮();
btn.setText(“说‘你好,世界’”);
btn.setOnAction(新的EventHandler



为什么要使用.useDelimiter(“”;?我会从文件中读取一行,然后将该行附加到文本区域。我看不出为什么不完全相同。删除.useDelimiter并将appendText(s.next())更改为appendText(s.nextLine()):我试过了,但它可以一行打印所有内容。我相信这就是我写入文件的方式,还有更好的方法吗?记事本和文本区域的处理方式似乎不同。记事本++处理方式\t不喜欢文本Area@SedrickJefferson:这也不能保证输出的外观,除非使用单间距字体javafx的默认字体不是这样的…为什么要使用.useDelimiter(“”;?我会从文件中读取一行,然后将该行附加到textArea。我不明白为什么它会不完全相同。删除.useDelimiter并将appendText(s.next())更改为appendText(s.nextLine()):我试过了,但它可以一行打印所有内容。我相信这就是我写入文件的方式,还有更好的方法吗?记事本和文本区域的处理方式似乎不同。记事本++处理方式\t不喜欢文本Area@SedrickJefferson:这也不能保证输出的外观,除非使用单间距字体javafx的默认字体不是这样的……我尝试了你发布的代码,它完美地打印到文本文件中,但在将其读取到文本区域时仍然存在相同的格式问题。我们是否可以使用其他控件来代替文本区域?你只需要玩数字。我更改了一些数字,其中大部分似乎是pla现在,谢谢我尝试了你发布的代码,它完美地打印到文本文件中,但在将其读取到文本区域时仍然存在相同的格式问题。我们是否可以使用另一个控件来代替文本区域?你只需玩数字。我更改了一些数字,其中大部分似乎已经就绪,谢谢