0

Web アプリケーションからテキスト ファイルを作成するために使用する Java クラスがあります。私は次のコードを使用しています:

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 サーバーの 1 つに保存します。

これは、ローカルで実行すると問題なく動作しますが、アプリケーションを 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();

これには、メッセージに加えて、例外名とスタック トレースが含まれます。メッセージが null である可能性があり、コードのどの行で例外が発生したかを簡単に確認できるため、これは特に役立ちます。

于 2010-07-16T17:02:10.443 に答える