[英]PrintWriter new line issue. Working fine in Eclipse
基本上我有以下方法,我知道有點矯枉過正,但我正在學習.....
public String showOrder() {
String x = "";
x = "Order Summary: \n ";
for (Order order : orders) {
x += " Product Id: " + order.getProductCode() + " Product Description: " + order.getProductDesc() +
" Order Quantity: " + order.getQuantity() + " Order Cost: £" + order.getCost() + "\n ";
}
x += "Total Cost: "+ getTotalCost() + "p Number of Orders: " + numOfOrders() + " Total Products: " + numOfProducts();
return x;
}
這正在我的測試程序中返回,因為我期望每個訂單都在自己的行上。
Product Id: 1...etcetc
Product Id 2...etcetc
Product Id 3...etcetc
但是,當我創建一個PrintWriter時,showOrder()方法會在我的.txt中打印出一個長列表。 文件。
PrintWriter cartReceipt = new PrintWriter("Cart.txt");
cartReceipt.println(cart1.showOrder());
cartReceipt.flush();
cartReceipt.close();
有沒有辦法讓同一個方法在txt文件中返回一個好的有序列表,就像在IDE中一樣?
問題是\\n
不是便攜式行結束。 你可以使用System.lineSeparator()
類的
x += " Product Id: " + order.getProductCode()
+ " Product Description: " + order.getProductDesc()
+ " Order Quantity: " + order.getQuantity()
+ " Order Cost: £" + order.getCost() + System.lineSeparator();
但是,如果將寫操作流式傳輸到PrintWriter
會更有效(因為除了編寫命令之外 ,您似乎不使用String
)。 您可以將PrintWriter
傳遞給寫入方法。 就像是,
public void writeOrder(PrintWriter pw) {
pw.println("Order Summary:");
for (Order order : orders) {
// NOTE: If possible, I would move this code into Order.toString()
// and then use pw.println(order);
pw.print(" Product Id: ");
pw.print(order.getProductCode());
pw.print(" Product Description: ");
pw.print(order.getProductDesc());
pw.print(" Order Quantity: ");
pw.print(order.getQuantity());
pw.print(" Order Cost: £");
pw.println(order.getCost());
}
pw.print("Total Cost: ");
pw.print(getTotalCost());
pw.print("p Number of Orders: ");
pw.print(numOfOrders());
pw.print(" Total Products: ");
pw.println(numOfProducts());
}
您使用“\\ n”作為換行符。 如果使用記事本讀取.txt文件,則它不會將'\\ n'字符識別為換行符(在Windows上通常為“\\ r \\ n”),因此會在同一行顯示所有行。 如果您使用IDE來讀取.txt文件,它可能會以您期望的方式顯示它。
編寫代碼的正確方法是使用System.lineSeparator()
。 您在代碼中應該進行的另一個更改純粹是出於性能原因:如果您在循環中一次構建一個字符串,則應使用StringBuilder
而不是String:
public String showOrder() {
StringBuilder x = new StringBuilder("Order Summary:");
x.append(System.lineSeparator());
for (Order order : orders) {
x.append(" Product Id: ").append(order.getProductCode()
.append(" Product Description: ").append(order.getProductDesc())
.append(" Order Quantity: ").append(order.getQuantity())
.append(" Order Cost: £").append(order.getCost())
.append(System.lineSeparator());
}
x.append("Total Cost: ").append(getTotalCost())
.append("p Number of Orders: ").append(numOfOrders())
.append(" Total Products: ").append(numOfProducts())
.append(System.lineSeparator());
return x.toString();
}
最后,在源文件中使用“£”等非ASCII字符時要小心。 確保使用與javac
預期相同的字符編碼(例如UTF-8或Windows-1252)。
您可以將"\\n"
替換為"\\r\\n"
,看看是否有幫助。 我懷疑這是否是應用程序對行分隔符的解釋。 例如,代碼中有'\\n'
(LF字符),但用於讀取文件的應用程序不會將其解釋為新行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.