2010-07-16 1 views
0

J'ai une classe Java que j'utilise pour créer un fichier texte à partir d'une application web. J'utilise le code suivant:application web: stocker le fichier txt sur le partage de serveur Windows à partir du serveur web 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()); 
} 
} 

pas une grande chose, exécutez une requête, obtenir les résultats et les écrire dans un format fixe dans un fichier et le stocker sur un de nos serveurs Windows. Cela fonctionne très bien lorsqu'il est exécuté localement. Toutefois, lorsque nous installons l'application sur le serveur Web Linux (et modifiez les paramètres sur Linux), les fichiers ne sont pas stockés dans l'emplacement réseau approprié.

J'ai essayé d'utiliser la notation de fichiers Windows et notation de fichiers Linux: \\ fileandprint \ Apps \ Jury \ share \ et // fileandprint/Applications/Jury/share/

et oui l'emplacement du fichier ne existe, comme je l'ai dit lorsqu'il est exécuté localement en développement ça marche, seulement quand il est sur la machine Linux ne stocke pas les fichiers correctement.

Des suggestions?

Répondre

0

Vous devez explicitement monter le partage réseau dans un répertoire local. S'il vous plaît voir http://linuxwiki.de/smbmount pour une explication sur la façon de le faire.

L'accès direct au partage réseau fonctionne dans les gestionnaires de fichiers Gnome et KDE, car ils appliquent eux-mêmes de la magie. Au niveau du système d'exploitation, ces chemins n'existent pas. Si cela ne résout pas le problème, veuillez joindre la sortie de l'exception. Vous pouvez modifier

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

à

err.printStackTrace(); 

Cela comprendra le nom d'exception et stacktrace en plus du message. Ceci est particulièrement utile car le message peut être nul et vous pouvez facilement voir dans quelle ligne de votre code l'exception s'est produite.

+0

Si vous voulez dire que le partage réseau Windows doit être accessible à partir du PC Linux, cela est déjà fait. Je peux utiliser TightVNC pour accéder à la boîte Linux, ouvrir le système de fichiers et voir Fileandprint sur le partage réseau Linux. – Leslie

+0

Comment avez-vous "ouvert le système de fichiers"? Je pose cette question car un certain nombre de programmes liés à gname/kde peuvent accéder directement aux partages réseau, même si java ne le peut pas. –

+0

Je me connecte sur la machine Linux avec l'utilisateur root. J'ouvre Root's Home à partir du bureau, ce qui me donne le navigateur de fichiers. De là, je clique sur Network Servers ... à partir de là, je peux voir le serveur FileandPrint et accéder au réseau. Je crois cependant que nous avons trouvé un travail autour de l'utilisation d'un serveur Windows Jitterbit pour créer les documents et les déplacer. – Leslie

Questions connexes