creare file flat a lunghezza fissa con Java
-
18-09-2019 - |
Domanda
Ho un processo che attualmente viene eseguito in un'applicazione Delphi che ho scritto e devo convertirlo in un processo Java che verrà eseguito sulla nostra applicazione web.Fondamentalmente il nostro sistema finanziario statale (legacy) richiede questo file in un output specifico.A Delphi è così:
procedure CreateSHAREJournalFile(AppDate : string; ClassCode : string; BudgetRef : String; AccountNumber : string; FYEStep : integer);
var
GLFileInfo : TStrings;
MPayFormat, HPayFormat, TPayFormat : string;
const
//this is the fixed length format for each item in the file
HeaderFormat = '%-1s%-5s%-10s%-8s%-12s%-10s%-21s%-3s%-71s%-3s%-20s%-1s';
DetailFormat = '%-1s%-5s%-9s%-10s%-10s%-10s%-10s%-8s%-6s%-5s%-5s%-5s%-8s%-25s%-10s%-60s%-28s%-66s%-28s';
begin
try
//get the data from the query
with dmJMS.qryShare do
begin
SQL.Clear;
SQL.Add('SELECT SUM(TOTHRPAY) As HourPay, SUM(TOTMLPAY) As MilePay, SUM(TOTALPAY) AS TotalPay FROM JMPCHECK INNER JOIN JMPMAIN ON JMPCHECK.JURNUM = JMPMAIN.JURNUM WHERE PANELID LIKE ''' + Copy(AppDate, 3, 6) + '%'' ');
if FYEStep > -1 then
SQL.Add('AND WARRANTNO = ' + QUotedStr(IntToStr(FYEStep)));
Active := True;
//assign totals to variables so they can be padded with leading zeros
MPayFormat := FieldByName('MilePay').AsString;
while length(MPayFormat) < 28 do <br>MPayFormat := '0' + MPayFormat;
HPayFormat := FieldByName('HourPay').AsString;
while length(HPayFormat) < 28 do <br>HPayFormat := '0' + HPayFormat;
TPayFormat := Format('%f' ,[(FieldByName('TotalPay').AsCurrency)]);
while length(TPayFormat) < 27 do
TPayFormat := '0' + TPayFormat;
TPayFormat := '-' + TPayFormat;
//create a TStringlist to put each line item into
GLFileInfo := TStringList.Create;
//add header info using HeaderFormat defined above
GLFileInfo.Add(Format(HeaderFormat, ['H', '21801', 'NEXT', FormatDateTime('MMDDYYYY', Today), '', 'ACTUALS', '', 'EXT', '', 'EXT', '', 'N']));
//add detail info using DetailFormat defined above
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '1', 'ACTUALS', AccountNumber, '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', AccountNumber + '0300', '', MPayFormat, '', MPayFormat]));
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '2', 'ACTUALS', AccountNumber, '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', AccountNumber + '0100', '', HPayFormat, '', HPayFormat]));
GLFileInfo.Add(Format(DetailFormat, ['L', '21801', '3', 'ACTUALS', '101900', '', '1414000000', '111500', '', '01200', ClassCode, '', BudgetRef, '', '', '', TPayFormat, '', TPayFormat]));
//save TStringList to text file
GLFileINfo.SaveToFile(ExtractFilePath(Application.ExeName) + 'FileTransfer\GL_' + formatdateTime('mmddyy', Today) + SequenceID + '24400' + '.txt');
end;
finally
GLFileINfo.Free;
end;
end;
Esiste un equivalente in Java per l'opzione Formato?O il TStringList che salva in un file di testo?
Grazie per qualsiasi informazione....non ho fatto molta programmazione Java!
Leslie
Soluzione
Queste sono tutte operazioni relativamente semplici in Java (o in molti altri linguaggi, del resto).Per il tuo caso d'uso in Java, probabilmente è più semplice accedere al database direttamente tramite JDBC, come mostrato Qui.Dopo aver recuperato i dati, è possibile utilizzare String.formato(...) per formattare i dati nel modo in cui ti servono e puoi quindi scriverli in un file (come descritto Qui).