создайте плоский файл фиксированной длины с помощью Java

StackOverflow https://stackoverflow.com/questions/2403255

Вопрос

У меня есть процесс, который в данный момент выполняется в приложении Delphi, которое я написал, и мне нужно преобразовать его в Java-процесс, который будет выполняться в нашем веб-приложении.В принципе, нашей государственной финансовой (устаревшей) системе требуется этот файл в виде определенного вывода.В Delphi это выглядит следующим образом:

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;

Есть ли эквивалент в Java для параметра Format?Или TStringList, который сохраняется в текстовый файл?

Спасибо за любую информацию .... не так уж много занимался программированием на Java!

Лесли

Это было полезно?

Решение

Все это относительно простые операции на Java (или на многих других языках, если уж на то пошло).Для вашего варианта использования в Java, вероятно, проще всего получить доступ к базе данных напрямую через JDBC, как показано на рисунке здесь.После получения данных вы можете использовать Строка.формат(...) отформатировать данные так, как вам нужно, и затем вы можете записать их в файл (как описано здесь).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top