读写文本文件java编程_通过键盘输入字符串写入文件

编程文档 (106) 2023-03-24 15:01

4.文本文件读写编程

文本文件以行为单位进行读写操作,只能顺序读写,读写不能同时进行。

4.1.以追加方式打开文本文件

通过调用 Append 过程可以打开一个已经存在的文本文件并可在文件末尾添加文本。格式:

procedure Append(var F: TextFile);

其中:F 为文本文件变量,且必须使用 AssignFile 与文件建立关联。

如果文件不存在则产生错误;如果文件已经打开则先关闭然后再打开。

打开文件后,当前文件的位置在文件的末尾。如果 F 为空,则与标准输出文件建立关联。

4.2文本文件的读取

当文本文件通过 Reset 过程打开以读方式打开后,就可以读取文件内容。读取文本文件可以使用 Read 、Readln 过程来完成。

1.Read

格式:

procedure Read([var F: TextFile;] v1 [, v2, v3, ..., vn]);

该过程可以从文本文件中读取字符串、字符、数值等。其中:

  • F - 文件文件变量;
  • v1,v2,... - 用于存储读取的数据,这些变量必须为相同的数据类型,数据类型可以为字符串类型、字符型、整型或实型等。

当数据类型为字符串或字符型时,Read 过程按照定义的长度读取字符。

当数据类型为整型或实型时,Read 过程以空格为分隔符,如果数值中出现逗号、分号或其他字符时产生异常。

2.Readln

格式:

procedure Readln([var F: TextFile;] v1 [, v2, v3, ..., vn]);

该过程可以从文本文件中读取字符串、字符、数值等,直到一行结束。

4.3文本文件的写入

当使用 Rewrite 或 Append 过程打开一个文本文件后,就可以使用 Write 或 Writeln 进行数据写入。

1.Write

格式:

procedure Write([var F: TextFile;] p1 [, p2, p3, ..., pn])

该过程向文件中写入数据。

其中:

F - 文本文件变量;

p1,p2,... - 存放写入的数据,可以是字符串型、字符型、整型或实型。

2.Writeln

格式:

procedure Writeln([var F: TextFile;] p1 [, p2, p3, ..., pn])

该过程向文件中写入一行数据,并在末尾处自动输入回车换行符。

4.4文本文件的基本操作

  • 与打印机建立关联
procedure AssignPrn(var F: TextFile);
  • 检查文件是否在行尾
function Eoln(var F: TextFile): Boolean;
  • 确保文件写入
procedure Flush(var F: TextFile);

对于以输入(Rewrite 或 Append)方式打开的文件缓冲区,以确保所有写入文件的内容都被写入到外部文件。

  • 返回文件尾部的状态
function SeekEof(var F: TextFile): Boolean;
  • 返回文件行尾状态
function SeekEoln(var F: TextFile): Boolean;
  • 设置文件缓冲区
procedure SetTextBuf(var F: TextFile, var Buf; Size: Integer);

4.5文本文件编程示例

示例:编写一个简单的文件编辑器,界面如下图:

读写文本文件java编程_通过键盘输入字符串写入文件_https://bianchenghao6.com/blog_编程文档_第1张

代码如下:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ExtDlgs;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    SaveTextFileDialog1: TSaveTextFileDialog;
    OpenTextFileDialog1: TOpenTextFileDialog;
    procedure Memo1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
    procedure CheckSaveFile;
    procedure SaveFileWithDialog;
    procedure SaveFile;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  F: TextFile;
  FileName: String;
  SaveState: Boolean;

implementation

{$R *.dfm}

procedure TForm1.CheckSaveFile;
var
  ret: Word;
begin
  if (not SaveState) and (Length(Memo1.Text) > 0) then
  begin
    if FileName <> '' then
      SaveFile
    else
    begin
      ret := MessageDlg('保存文件吗?', mtConfirmation, [mbOk, mbCancel], 0);
      if ret = mrOk then
      begin
        if FileName = '' then
        begin
          SaveFileWithDialog;
        end;
      end;
    end;
  end;
end;

procedure TForm1.SaveFileWithDialog;
begin
  if SaveTextFileDialog1.Execute then
  begin
    FileName := SaveTextFileDialog1.FileName;
    SaveFile;
    SaveState := true;
  end;
end;

procedure TForm1.SaveFile;
var
  i: Integer;
begin
  AssignFile(F, FileName);
  Rewrite(F);
  for i := 0 to Memo1.Lines.Count do
    Writeln(F, Utf8encode(Memo1.Lines.Strings[i]));
  CloseFile(F);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  // Memo 内容发生变化时,将文件的保存状态设置为 fasle
  SaveState := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ret: Word;
begin
  // 新建按钮
  CheckSaveFile;

  FileName := '';
  SaveState := false;
  Memo1.Text := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  line: String;
begin
  // 打开按钮
  CheckSaveFile;

  if OpenTextFileDialog1.Execute then
  begin
    FileName := OpenTextFileDialog1.FileName;
    AssignFile(F, FileName);
    Reset(F);
    Memo1.Text := '';
    while not Eof(F) do
    begin
      Readln(F, line);
      Memo1.Lines.Add(line);
    end;
    CloseFile(F);
    SaveState := true;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  // 保存按钮
  if FileName = '' then
    SaveFileWithDialog
  else
    SaveFile;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  // 另存为按钮
  SaveFileWithDialog;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  // 退出按钮
  CheckSaveFile;
  Close;
end;

end.

上一篇

已是最后文章

发表回复