将System.out的输出作为文件

时间:2018-01-19 15:12:43

标签: file

我是编程和处理这个图书馆系统项目的新手。 它使用链接列表来保存书籍和成员的详细信息。 它有两个功能,可以打印库中所有书籍的详细信息以及库的所有成员。

当我为我的项目制作GUI时,我无法在Frame中打印细节。 所以,我想用文件来做。

我已经成功打印了文件中的所有内容,但现在我的问题是我应该如何向用户显示文件?

如果用户按下"显示所有书籍"按钮,它应该自动打开相应的文件。 我尝试过搜索,但我无法弄清楚实际搜索的内容,因为我是初学者。

任何帮助都会非常感谢。

更新: 我尝试使用Desktop.getDesktop(文件),我收到此错误。

public class ApplicationStore
{
        public int StoreId { get; set; }
        public string Name { get; set; }
        public bool IsActive { get; set; }
        public System.DateTime CreatedAt { get; set; }
        public System.DateTime ModifiedAt { get; set; }
        public string ModifiedBy { get; set; }
        public virtual ICollection<StoreAction> Actions { get; set; }
 }
 public class StoreAction
 {
        public int ActionId { get; set; }
        public int StoreId { get; set; }
        public string ActionName { get; set; }
        public string ActionRoute { get; set; }
        public string RequestType { get; set; }
        public virtual ApplicationStore Store { get; set; }
 }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ApplicationStore>().HasKey(m => new { m.StoreId, m.Name });
        modelBuilder.Entity<ApplicationStore>().Property(t => t.StoreId).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
        modelBuilder.Entity<ApplicationStore>().Property(m => m.Name).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

        modelBuilder.Entity<StoreAction>().HasKey(m => new { m.ActionId });
        modelBuilder.Entity<StoreAction>().Property(m => m.ActionId).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);

        // configures one-to-many relationship
        modelBuilder.Entity<ApplicationStore>().HasMany(a => a.Actions).WithRequired(s => s.Store).HasForeignKey(s=> s.StoreId);

        base.OnModelCreating(modelBuilder);
    }

这是我的stringToLong方法

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Book issued successfully"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at RunProgram.stringToLong(RunProgram.java:217)
at RunProgram.actionPerformed(RunProgram.java:196)

这是打印细节的方法

 private static long stringToLong(String stringObject){
    return Long.parseLong(stringObject.trim());
}

这就是我在actionListener方法中调用此方法的方法。

void printBooksIssued(long cpr) throws IOException{

    File file = new File("d:/work/test.txt");
    System.setOut(new PrintStream(new FileOutputStream(file)));

    int index = 0;
    if (searchMember(cpr) == -1)
        System.out.println("Member doesn't exist.");
    LibMember m = membersList.get(index);
    while (index < sizeMembersList() ){
        if (m.getCprNum() == cpr){
            System.out.println(Arrays.toString(m.getBooksIssued()));
            return;
        }
        index++;
        if (index < sizeMembersList())
            m = membersList.get(index);
    }
    Desktop.getDesktop().open(file);
}

我不明白的是,字符串&#34; Book发布的numberFormatException的第一个错误与此按钮和文本字段完全分开。那为什么它会给出错误。

case "Print details of books issued to member": {
            long cprNum = stringToLong(cpr.getText());
            try {
                ITLib.printBooksIssued(cprNum);
            }
            catch (IOException e1){
                fName.setText("Error. Make sure CPR number is correct and try again.");
            }
        }

1 个答案:

答案 0 :(得分:0)

如果您使用的是Java并使用后缀&#34; .txt&#34;保存文件,则可以使用Desktop.getDesktop()

以下是一个示例,它将弹出文本的默认系统编辑器:

File file = new File("d:/work/test.txt");
System.setOut(new PrintStream(new FileOutputStream(file)));
System.out.println("Testing 1");
System.out.println("Testing 2");
Desktop.getDesktop().open(file);

在Windows上,这将使用&#34; text.txt&#34;打开notepad.exe。文件。

enter image description here