Làm thế nào chúng ta có thể chuyển hướng một đầu ra giao diện điều khiển chương trình Java sang nhiều tệp?


161

Làm thế nào chúng ta có thể chuyển hướng đầu ra của bảng điều khiển nhật thực đến một tập tin? Tôi có thể:

  1. Run Configuration-> Commons-> Select a file.
  2. Sử dụng System.setOut(PrintStream)System.setErr(PrintStream).

Vấn đề với 1) là tôi cần ghi lại đầu ra của bàn điều khiển vào các tệp khác nhau thay vì một tệp.

Vấn đề với 2) là nó chỉ lưu trữ đầu ra giao diện điều khiển được tạo bởi System.out.println()hoặc stacktrace của một ngoại lệ được ném. Nó không nắm bắt được các loại đầu ra khác, ví dụ như cảnh báo log4j, v.v.

Làm thế nào chúng ta có thể chuyển hướng đầu ra giao diện điều khiển đến các tệp khác nhau theo chương trình?


1) Có thể bạn sẽ sử dụng "Biến .." (ví dụ) C: \ test $ {???: ??}. Txt
cloverink

2
Đây là một ý tưởng. Viết plugin nhật thực của riêng bạn (ví dụ: nút cusotm) sẽ gán giá trị ngẫu nhiên nhưng duy nhất cho một biến (được gọi ${NAME}), sau đó sẽ thực hiện tương tự như chạy. Sau đó sử dụng $NAMElàm giá trị cho tệp đầu ra. có lẽ?
Một Hai Ba

Câu trả lời:


176

Đi để chạy như và chọn Run Configurations-> Commonvà trong Đầu vào và đầu ra tiêu chuẩn, bạn cũng có thể chọn một tệp.


106
Tôi thấy thật vui khi 40 người đã đưa ra một bản sao-dán từ dòng thứ hai của câu hỏi.
AnthonyW

13
@AnthonyW Tôi nghĩ rằng phần lớn là do mọi người được dẫn đến đây bởi câu hỏi tiêu đề "Làm thế nào chúng ta có thể chuyển hướng đầu ra nhật thực sang một tệp". Câu trả lời này trong thực tế là một câu trả lời cho câu hỏi tiêu đề.
Gerome Bochmann 20/03/2015

1
Nếu bạn không thể tìm thấy "Chạy cấu hình", sử dụng Eclipse 4.4 (Luna), tôi đã mở Cấu hình khởi chạy của mình (bằng cách nhấp đúp vào máy chủ trong tab Máy chủ), nhấp vào "Mở cấu hình lanuch", sau đó chuyển đến tab Chung . Ở nửa dưới của hộp thoại đó, có một phần gọi là "Đầu vào và đầu ra tiêu chuẩn". Ở đây, tôi có thể nhấp vào Tệp và đặt tên tệp.
Guy Schalnat

1
Gợi ý: mở một thiết bị đầu cuối echo $TTYvà chỉ định bất cứ thứ gì nó trả về dưới dạng tệp của bạn. Sau đó, thiết bị đầu cuối sẽ phản chiếu những gì trong bảng điều khiển Eclipse của bạn.
Sridhar Sarnobat

2
Gì? Câu trả lời này không chính xác khi đọc kỹ câu hỏi của người hỏi.
ComputerSellectist

11

Bạn có thể sử dụng một "biến" bên trong tên tệp đầu ra, ví dụ:

/tmp/FetchBlock-${current_date}.txt

ngay hiện tại:

Trả về thời gian hệ thống hiện tại được định dạng là yyyyMMdd_HHmm. Một đối số tùy chọn có thể được sử dụng để cung cấp định dạng thay thế. Đối số phải là mẫu hợp lệ cho java.util.SimpleDateFormat.

Hoặc bạn cũng có thể sử dụng system_property hoặc env_var để chỉ định một cái gì đó động (một trong hai cần phải được chỉ định làm đối số)


8

Bạn có thể đặt đầu ra của System.out theo chương trình bằng cách thực hiện:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

Biên tập:

Do thực tế là giải pháp này dựa trên a PrintStream, chúng tôi có thể kích hoạt autoFlush, nhưng theo các tài liệu :

autoFlush - Một boolean; nếu đúng, bộ đệm đầu ra sẽ bị xóa bất cứ khi nào một mảng byte được viết, một trong các phương thức println được gọi hoặc một ký tự dòng mới hoặc byte ('\ n') được viết

Vì vậy, nếu một dòng mới không được viết, hãy nhớ System.out.flush()thủ công.

(Cảm ơn Robert Tupelo-Schneck)


1
Có vẻ như bạn cũng cần phải đóng System.out.flush()lại để tránh có thể thiếu một số đầu ra.
Robert Tupelo-Schneck

1

Để giải quyết vấn đề, tôi sử dụng biến $ {string_prompt}. Nó hiển thị một hộp thoại đầu vào khi ứng dụng chạy. Tôi có thể đặt ngày / giờ theo cách thủ công tại hộp thoại đó.

  1. Di chuyển con trỏ ở cuối đường dẫn tệp. nhập mô tả hình ảnh ở đây

  2. Nhấp vào biến và chọn string_prompt nhập mô tả hình ảnh ở đây

  3. Chọn Áp dụng và Chạy nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


0

Chúng ta có thể làm điều này bằng cách đặt biến của lớp System theo cách sau

System.setOut (PrintStream mới (FileOutputStream mới ("Đường dẫn đến tệp đầu ra"))). Ngoài ra, bạn cần đóng hoặc xóa biến 'out' (System.out.close () hoặc System.out.flush ()) để cuối cùng bạn không bị mất một số đầu ra.

Nguồn: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.