2010-07-16 3 views
0

У меня есть класс java, который я использую для создания текстового файла из веб-приложения. Я использую следующий код:веб-приложение: хранить txt-файл на сервере Windows share с веб-сервера linux

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 (и меняем настройки на Linux), файлы не сохраняются в правильном сетевом расположении.

Я попытался с помощью нотации файла для Windows и Linux файл обозначения: \\ fileandprint \ Apps \ жюри \ SHARE \ и // fileandprint/Apps/Жюри/SHARE/

да и расположение файла делает существуют, как я сказал при запуске локально в процессе разработки, он работает, только когда он находится в ящике Linux, он не сохраняет файлы правильно.

Любые предложения?

ответ

0

необходимо явно подключить сетевой ресурс в локальный каталог. Пожалуйста, см. http://linuxwiki.de/smbmount для объяснения того, как это сделать.

Прямой доступ к сетевому ресурсу работает в менеджерах файлов Gnome и KDE, поскольку они сами применяют магию. На уровне операционной системы эти исправления не существуют.

Если это не решило проблему, приложите выходной сигнал исключения. Вы можете изменить

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

в

err.printStackTrace(); 

Это будет включать имя исключения и трассировку стека в дополнение к сообщению. Это особенно полезно, потому что сообщение может быть нулевым, и вы можете легко увидеть, в какой строке вашего кода произошло исключение.

+0

Если вы имеете в виду, что сетевой ресурс Windows должен быть доступен с ПК Linux, это уже сделано. Я могу использовать TightVNC для доступа к Linux-файлу, открыть файловую систему и увидеть Fileandprint в общем доступе к сети Linux. – Leslie

+0

Как вы «открыли файловую систему»? Я спрашиваю, потому что ряд связанных с gname/kde программ может получить доступ к сетевым ресурсам напрямую, хотя java не может. –

+0

Я вхожу в ящик Linux с пользователем root. Я открываю Root's Home с рабочего стола, который получает от меня браузер файлов. Оттуда я нажимаю «Сетевые серверы» ... оттуда я могу увидеть сервер FileandPrint и перейти в сеть. Я считаю, однако, что мы нашли работу с использованием Jitterbit Windows Server для создания документов и их перемещения. – Leslie