เราจะเปลี่ยนเส้นทางเอาต์พุตคอนโซลโปรแกรม Java ไปยังหลาย ๆ ไฟล์ได้อย่างไร


161

เราจะเปลี่ยนเส้นทางเอาต์พุตคอนโซล eclipse ไปยังไฟล์ได้อย่างไร? ฉันสามารถ:

  1. Run Configuration-> ->CommonsSelect a file
  2. การใช้งานและSystem.setOut(PrintStream)System.setErr(PrintStream)

ปัญหาเกี่ยวกับ 1) คือฉันต้องบันทึกเอาท์พุทคอนโซลเป็นไฟล์อื่นแทนที่จะเป็นไฟล์เดียว

ปัญหาเกี่ยวกับ 2) คือมันเก็บเฉพาะเอาท์พุทคอนโซลที่สร้างขึ้นโดยSystem.out.println()หรือสแต็คสแต็คของข้อยกเว้นโยน มันไม่ได้จับเอาท์พุทประเภทอื่นเช่นคำเตือน log4j เป็นต้น

เราจะเปลี่ยนเส้นทางเอาต์พุตคอนโซลไปยังไฟล์ต่าง ๆ โดยทางโปรแกรมได้อย่างไร


1) คุณอาจใช้คำว่า "Variables .. " (ex) C: \ test $ {???: ??}. txt
cloverink

2
นี่คือความคิด เขียนอุปราคาปลั๊กอินของคุณเอง (เช่น., ปุ่ม cusotm) ซึ่งจะกำหนดค่าแบบสุ่ม แต่ที่ไม่ซ้ำกับตัวแปร (เรียกว่า${NAME}) แล้วจะทำสิ่งเดียวกันเป็นระยะ จากนั้นใช้$NAMEเป็นค่าสำหรับไฟล์ที่ส่งออก อาจจะ?
หนึ่งสองสาม

คำตอบ:


176

ไปที่รันและเลือกRun Configurations-> Commonและในอินพุตมาตรฐานและเอาต์พุตคุณสามารถเลือกไฟล์ได้เช่นกัน


106
ฉันพบว่ามันเฮฮาอย่างยิ่งที่ 40 คน upvoted คัดลอกวางจากบรรทัดที่สองของคำถาม
AnthonyW

13
@AththonyW ฉันคิดว่าส่วนใหญ่เป็นเพราะคนนำมาที่นี่ด้วยคำถามชื่อซึ่งเป็น "เราจะเปลี่ยนเส้นทางการส่งออกคราสไปยังไฟล์" ได้อย่างไร คำตอบนี้ในความเป็นจริงคำตอบสำหรับคำถามที่ชื่อ
Gerome Bochmann

1
หากคุณไม่พบ "เรียกใช้การกำหนดค่า" โดยใช้ Eclipse 4.4 (Luna) ฉันเปิดการกำหนดค่าเริ่มต้นของฉัน (โดยดับเบิลคลิกที่เซิร์ฟเวอร์ในแท็บเซิร์ฟเวอร์) คลิกที่ "เปิดการกำหนดค่า Lanuch" จากนั้นไปที่แท็บทั่วไป . ในครึ่งล่างของกล่องโต้ตอบนั้นจะมีส่วนที่เรียกว่า "อินพุตมาตรฐานและเอาต์พุต" ที่นี่ฉันสามารถคลิกที่ไฟล์และตั้งชื่อไฟล์
Guy Schalnat

1
คำแนะนำ: เปิดเทอร์มินัลแล้วecho $TTYระบุสิ่งที่จะส่งคืนเป็นไฟล์ของคุณ จากนั้นเทอร์มินัลจะสะท้อนสิ่งที่อยู่ในคอนโซล Eclipse ของคุณ
Sridhar Sarnobat

2
อะไร? คำตอบนี้ไม่ถูกต้องเมื่ออ่านคำถามของผู้ถามอย่างระมัดระวัง
วิทยาศาสตร์คอมพิวเตอร์

11

คุณสามารถใช้ "ตัวแปร" ภายในชื่อไฟล์เอาต์พุตตัวอย่างเช่น:

/tmp/FetchBlock-${current_date}.txt

วันที่ปัจจุบัน:

ส่งคืนเวลาระบบปัจจุบันที่จัดรูปแบบเป็น yyyyMMdd_HHmm อาร์กิวเมนต์ตัวเลือกสามารถใช้เพื่อจัดรูปแบบทางเลือก อาร์กิวเมนต์ต้องเป็นรูปแบบที่ถูกต้องสำหรับ java.util.SimpleDateFormat

หรือคุณสามารถใช้ system_property หรือ env_var เพื่อระบุบางสิ่งบางอย่างแบบไดนามิก (ต้องระบุอย่างใดอย่างหนึ่งเป็นอาร์กิวเมนต์)


8

คุณสามารถตั้งค่าผลลัพธ์ของ System.out โดยทางโปรแกรมโดยทำ:

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

แก้ไข:

เนื่องจากความจริงที่ว่าโซลูชันนี้มีพื้นฐานจาก a PrintStreamเราสามารถเปิดใช้งาน autoFlush แต่ตามเอกสาร :

autoFlush - บูลีน; ถ้าเป็นจริงบัฟเฟอร์เอาต์พุตจะถูกล้างออกเมื่อใดก็ตามที่มีการเขียนอาร์เรย์ไบต์หนึ่งในวิธีการ println ถูกเรียกใช้หรืออักขระขึ้นบรรทัดใหม่หรือไบต์ ('\ n') ถูกเขียน

ดังนั้นหากบรรทัดใหม่ไม่ได้ถูกเขียนไว้ให้จำไว้System.out.flush()ด้วยตนเอง

(ขอบคุณ Robert Tupelo-Schneck)


1
ดูเหมือนว่าคุณต้องปิดด้วยSystem.out.flush()เพื่อหลีกเลี่ยงอาจหายไปบางเอาท์พุท
Robert Tupelo-Schneck

1

เพื่อแก้ปัญหาฉันใช้ตัวแปร $ {string_prompt} มันแสดงข้อความโต้ตอบเมื่อแอปพลิเคชันทำงาน ฉันสามารถตั้งวันที่ / เวลาด้วยตนเองได้ที่กล่องโต้ตอบนั้น

  1. เลื่อนเคอร์เซอร์ที่ท้ายไฟล์พา ธ ป้อนคำอธิบายรูปภาพที่นี่

  2. คลิกตัวแปรและเลือกstring_prompt ป้อนคำอธิบายรูปภาพที่นี่

  3. เลือกใช้และเรียกใช้ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


0

เราสามารถทำได้โดยการกำหนดตัวแปรของคลาสระบบด้วยวิธีต่อไปนี้

System.setOut (PrintStream ใหม่ (FileOutputStream ใหม่ ("พา ธ ไปยังไฟล์เอาต์พุต"))) นอกจากนี้คุณต้องปิดหรือล้าง 'ออก' (ตัวแปร System.out.close () หรือ System.out.flush ()) เพื่อที่คุณจะได้ไม่พลาดผลลัพธ์ที่ขาดหายไป

ที่มา: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.