一 读取一行
读取一行的方式有两种,分别为:??? (1) 使用方法 readline(FILEHANDLE) ; (2) 使用符号<>
# my 申明为局部变量,作用域
my $filename = "a.txt";
my $encoding = "";
my $handle = undef;
#打开
open($handle,"<",$filename) || die "$0 : can't open $filename for reading:$!";
#read a line,读取时包含该行的n符号也会读取 方式一
$line = <$handle>;
#去除行的n
chomp($line);
print $line;
#read a line 方式二
$line = readline($handle);
print $line;
#关闭
close($handle);
二 读取所有行到列表中
使用 @array = <FILEHANDLE>
my $filename = "a.txt";
my $encoding = "";
my $handle = undef;
open($handle,$filename) || die "$0 : can't open $filename for reading:$!";
#read a line
$line = <$handle>;
print $line;
#把剩余的行都读取到一个list里面
@arr = <xxFile>;
#遍历@arr
foreach $a (@arr) {
print $a;
}
close($handle);
三 写入一行
使用 print FILEHANDLE LIST
#写文件
$xxfilename = "xx.txt";
# 写入模式 >表示覆盖之前的文件,>>表示追加在文件的尾部
open (xxFile,">>",$xxfilename) or die "could not open $xxfilename : $!";
print xxFile ("aaaaaaaaaaabbddn");#注意圆括号前有空格,若没有则会出错提示为undefined subroutine &main::xxFile
close(xxFile);
四 复制文件,一行对一行
#把一个文件的内容复制到另外一个文件中
$srcFilename = "xx.txt";
$destFilename = "out.txt";
open(srcFile,$srcFilename) or die "file could not open $srcFilename : $!";
open(destFile,">",$destFilename) or die "file could not open $destFilename : $!";
#循环写入,读取一行,写入一行
while($line = <srcFile>) {
print destFile ($line);
}
close(srcFile);
close(destFile);
五 复制文件,读取任意字节数
读取:read FILEHANDLE,SCALAR,LENGTH
写入:syswrite FILEHANDLE,SCALAR
my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "a.txt";
my $srcHandle = undef;
my $destFilename = "a_dest.txt";
my $destHandle = undef;
open($srcHandle,$srcFilename) || die "$0 can't open $srcFilename : $!";
open($destHandle,$destFilename) || die "$0 can't open $destFilename : $!";
while(read($srcHandle,$buffer,$BUFSIZE)) {
unless(syswrite $destHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
die "can't write to $destFilename : $!";
}
}
#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";
六 复制二进制文件
对二进制文件(如图片)进行操作时,与普通文件不一样,需要对文件引用对进行处理,使用 binmode FILEHANDLE
#操作二进制文件
my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "bg1.png";
#my $encoding = ":encoding(UTF-16LE)";
my $srcHandle = undef;
my $destFilename = "bg1_dest.png";
my $destHandle = undef;
#打开二进制文件
open($srcHandle,$destFilename) || die "$0 can't open $destFilename : $!";
##二进制处理##
for my $handle($srcHandle,$destHandle) {
binmode($handle) || die "binmode failed";
}
while(read($srcHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
die "can't write to $destFilename : $!";
}
}
#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";