用Java创建定长平面文件

用Java创建定长平面文件,java,web-applications,export,flat-file,Java,Web Applications,Export,Flat File,我有一个进程,目前在我编写的Delphi应用程序中运行,我需要将其转换为Java进程,该进程将在我们的web应用程序上运行。基本上,我们的州金融(遗留)系统需要在特定输出中使用此文件。在Delphi中是这样的: procedure CreateSHAREJournalFile(AppDate : string; ClassCode : string; BudgetRef : String; AccountNumber : string; FYEStep : integer); var GLFil

我有一个进程,目前在我编写的Delphi应用程序中运行,我需要将其转换为Java进程,该进程将在我们的web应用程序上运行。基本上,我们的州金融(遗留)系统需要在特定输出中使用此文件。在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;
过程CreateSHAREJournalFile(AppDate:string;ClassCode:string;BudgetRef:string;AccountNumber:string;FYEStep:integer);
变量
GLFileInfo:t字符串;
MPayFormat、HPayFormat、TPayFormat:字符串;
常数
//这是文件中每个项目的固定长度格式
头部性能='-1s%-5s%-10s%-8s%-12s%-10s%-21s%-3s%-71s%-3s%-20s%-1s';
详细格式=“%-1s%-5s%-9s%-10s%-10s%-10s%-8s%-6s%-5s%-5s%-5s%-8s%-25s%-10s%-60s%-28s%-66s%-28s”;
开始
尝试
//从查询中获取数据
使用dmJMS.qryShare do
开始
SQL.Clear;
Add('选择SUM(TOTHRPAY)作为HourPay,SUM(TOTMLPAY)作为MilePay,SUM(TOTALPAY)作为来自JMPCHECK的TOTALPAY,在JMPCHECK.JURNUM=JMPMAIN.JURNUM上连接JMPMAIN,其中PANELID类似于'''+'Copy(AppDate,3,6)+'%'');
如果FYEStep>-1,则
SQL.Add('和担保编号='+QUotedStr(IntToStr(FYEStep)));
活动:=真;
//将总计分配给变量,以便可以用前导零填充它们
MPayFormat:=FieldByName('MilePay')。AsString;
而长度(MPayFormat)<28 do
MPayFormat:=“0”+MPayFormat; HPayFormat:=FieldByName('HourPay')。AsString; 而长度(HPayFormat)<28 do
HPayFormat:=“0”+HPayFormat; TPayFormat:=格式('%f',[(FieldByName('TotalPay').AsCurrency)]; 而长度(TPayFormat)<27 do TPayFormat:=“0”+TPayFormat; TPayFormat:='-'+TPayFormat; //创建一个TStringlist,将每个行项目放入 GLFileInfo:=TStringList.Create; //使用上面定义的HeadPerformat添加标题信息 GLFileInfo.Add(格式(HeaderFormat,['H','21801','NEXT',FormatDateTime('MMDDYYYY',Today),'ACTUALS','EXT','EXT','N']); //使用上面定义的DetailFormat添加详细信息 GLFileInfo.Add(格式(详细格式,['L','21801','1','ACTUALS',AccountNumber','1414000000','111500','01200',ClassCode','BudgetRef','AccountNumber+'0300','MPayFormat','MPayFormat]); GLFileInfo.Add(格式(DetailFormat,['L','21801','2','ACTUALS',AccountNumber','1414000000','111500','01200',ClassCode','BudgetRef','AccountNumber+'0100','HPayFormat','HPayFormat]); GLFileInfo.Add(格式(DetailFormat,['L','21801','3','ACTUALS','101900','1414000000','111500','01200',ClassCode','BudgetRef','''','TPayFormat','TPayFormat]); //将TStringList保存到文本文件 GLFileINfo.SaveToFile(ExtractFilePath(Application.ExeName)+'FileTransfer\GL_'+formatdateTime('mmddyy',Today)+SequenceID++'24400'+'.txt'); 结束; 最后 GLFileINfo.Free; 结束; 结束;
在Java中,格式选项是否有一个等价物?还是保存到文本文件的TStringList

感谢您提供的任何信息……我还没有做过很多Java编程


Leslie

这些都是Java(或其他许多语言)中相对简单的操作。
对于Java中的用例,可能最容易通过JDBC直接访问数据库,如图所示。检索数据后,可以使用格式化数据,然后将其写入文件(如上所述)。

我找到了此链接,但看不到如何格式化输出:供将来参考,这不是Stackoverflow上编码代码块的方式。只需将所有代码缩进4个空格。谢谢您提供的信息!我尝试了各种方法让它看起来正确!谢谢你的编辑!是的,我知道它们是简单的操作,但是当你不确定搜索什么时,就很难找到答案!感谢您的链接,尤其是String.format!很高兴能帮上忙。:)