0

我有一个 java 类,用于从 Web 应用程序创建文本文件。我正在使用以下代码:

private void CreatePaymentFile(String QueryCriteria) {
BigDecimal TotalPay;
DecimalFormat df2 = new DecimalFormat("00000");
String RecordString = null;
try{
String fileName = "\\\\fileandprint\\Apps\\Jury\\SHARE\\Payment_" + shortdateToday + SeqID + "24400.txt";
File f = new File(fileName);
FileOutputStream fop = new FileOutputStream(f);
SetPaymentFileName("Payment_" + shortdateToday + SeqID + "24400.txt");
FileWriter PaymentStream = new FileWriter(fileName,true);
BufferedWriter out = new BufferedWriter(PaymentStream);

// TODO Auto-generated method stub
String RecordStringFormat = "%-220s%-3s%-4s%-3s%-5s%-5s%-5s%-5s%-30s%-287s%-10s%-150s%-1s%-30s%-1s%-80s%-10s%-6s%-6s%-10s%-20s%-5s%-12s%-43s%-2s%-10s%-70s%-3s%-1s%-1s%-10s%-4s%-6s%-10s%-10s%-5s%27s";
JurorPayDetails JurorpayDetails = new JurorPayDetails();
ArrayList<JurorPayDetails.JurorPayDetailsTable> JurorPayDetailsObjList = new ArrayList<JurorPayDetails.JurorPayDetailsTable>();
JurorpayDetails.setJurorPayDetailsSql("Select P.*, GroupAssignment, TermDateServed, LastName, FirstName, Street1, Street2, City, State, ZipCode, Mileage, PublicEmployee, PayTime, PayMiles from PayDetails P INNER JOIN Jurors J ON P.JurorID = J.JurorID INNER JOIN Address A ON J.JurorID = A.JurorID where AddressType = 'M' and J.TermDateServed IN (" + QueryCriteria +") ORDER BY GroupAssignment, LastName");
boolean indicator = JurorpayDetails.setListOfJurorPayDetails();

if (indicator == true)
{
int size = JurorpayDetails.getListSize();
JurorPayDetailsObjList = JurorpayDetails.getJurorPayDetailsList();
for (int i=0; i<size; ++i){
JurorPayDetails.JurorPayDetailsTable eachPayable = JurorPayDetails.JurorPayDetailsTable)JurorPayDetailsObjList.get(i);
TotalPay = eachPayable.HoursAmount.add(eachPayable.MilesAmount);
RecordString = String.format(RecordStringFormat, ((eachPayable.Street1.trim() + " " + eachPayable.Street2.trim()).trim()), "1","B","1","WFB10","00000","21801","21801",eachPayable.City,"",longdateToday,"", "N", "21801_" + eachPayable.JurorID,"N",((eachPayable.FirstName.trim() + " " + eachPayable.LastName.trim()).trim()),"",    "PYMTLD","0",longdateToday,"21801" + shortdateToday + SeqID,df2.format(i + 1),eachPayable.Zipcode,"","RE","0","","CHK","N", "Y",longdateToday,"PYMT",eachPayable.State, "","001","01200",Paymentdf.format(TotalPay));
out.append(RecordString);
out.newLine();
}
out.close();
}
}catch (Exception e) {
System.err.println("error: " + e.getMessage());
}
}

没什么大不了的,运行查询,获取结果并将它们以固定格式写入文件并将其存储在我们的一个 Windows 服务器上。

这在本地运行时工作正常,但是,当我们将应用程序放在 Linux Web 服务器上(并将设置更改为 Linux)时,文件未存储在正确的网络位置。

我尝试使用 Windows 文件表示法和 Linux 文件表示法:\\fileandprint\Apps\Jury\SHARE\ 和 //fileandprint/Apps/Jury/SHARE/

是的,文件位置确实存在,正如我所说,在开发中本地运行时它可以工作,只有当它在 Linux 机器上时,它才能正确存储文件。

有什么建议么?

4

1 回答 1

0

您需要将网络共享显式挂载到本地目录中。请参阅http://linuxwiki.de/smbmount以获取有关如何执行此操作的说明。

直接访问网络共享在 Gnome 和 KDE 文件管理器中工作,因为它们自己应用了一些魔法。在操作系统级别上,这些路径不存在。

如果这不能解决问题,请附上异常输出。你可以改变

System.err.println("error: " + e.getMessage());

err.printStackTrace();

除了消息之外,这将包括异常名称和堆栈跟踪。这特别有用,因为消息可能为空,您可以轻松查看异常发生在代码的哪一行。

于 2010-07-16T17:02:10.443 回答