最近很多小伙伴都在问使用Java8,打印文件中所有行的最优选,最简洁的方法是什么?和java打印类型这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android–强制Idea生成
最近很多小伙伴都在问使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?和java 打印类型这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android – 强制Idea生成R.Java文件的最简单的方法是什么?、linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行、Linux,打印文件中的所有行,而不是以、perl – 打开/处理目录中所有文件的最有效方法是什么?等相关知识,下面开始了哦!
本文目录一览:- 使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?(java 打印类型)
- android – 强制Idea生成R.Java文件的最简单的方法是什么?
- linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行
- Linux,打印文件中的所有行,而不是以
- perl – 打开/处理目录中所有文件的最有效方法是什么?
使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?(java 打印类型)
使用新的Java 8打印文件中所有行的最优选,最简洁的方法是什么?
输出必须是文件的副本,一行一行,如下所示:
[Line 1 ...][Line 2 ...]
这个问题与带有lambda的Java-8有关,即使在较旧的版本中也可以这样做。展示Java-8的全部含义!
答案1
小编典典这会在try围栏中使用带有lambda的新Stream。
我想说这是最可取的和简洁的方法,因为:
1)完成后,它将自动关闭流并正确引发任何异常。
2)这是懒惰的输出。在处理最后一行之后读取每一行。这也更接近原始的基于Java流的文件处理规范。
3)以最类似于文件中数据的方式打印每一行。
4)这会减少内存占用,因为它不会创建中间列表或数组,例如Files.readAllLines(…)
5)这是最灵活的,因为提供的Stream对象具有许多其他用途和功能来处理数据(转换,集合,谓词等)。
try (Stream<String> stream = Files.lines(Paths.get("sample.txt"),Charset.defaultCharset())) { stream.forEach(System.out::println); }
如果提供了路径和字符集,并且使用者可以使用任何对象,那么它也可以工作:
try (Stream stream = Files.lines(path,charset)) { stream.forEach(System.out::println); }
错误处理:
try (Stream<String> stream = Files.lines(Paths.get("sample.txt"),Charset.defaultCharset())) { stream.forEach(System.out::println); } catch (IOException ex) { // do something with exception }
android – 强制Idea生成R.Java文件的最简单的方法是什么?
解决方法
linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行
文件中的行直到某个模式.
用例是将所有行转储到日志文件中,直到找到一些为止
表示服务器已重新启动的标记.
这是一种愚蠢的shell方式:
tail_file_to_pattern() { pattern=$1 file=$2 tail -n$((1 + $(wc -l $file | cut -d' ' -f1) - $(grep -E -n "$pattern" $file | tail -n 1 | cut -d ':' -f1))) $file }
在stdin上获取文件的稍微更可靠的Perl方式:
perl -we ' push @lines => $_ while <STDIN>; my $pattern = $ARGV[0]; END { my $last_match = 0; for (my $i = @lines; $i--;) { $last_match = $i and last if $lines[$i] =~ /$pattern/; } print @lines[$last_match..$#lines]; } '
当然,你可以更有效地打开文件,
寻求最终并寻找回来,直到找到匹配的行.
从第一次出现时很容易打印所有内容,例如:
sed -n '/PATTERN/,$p'
但我还没有提出一种方法来打印最后的一切
次数.
解决方法
sed -e "H;/${pattern}/h" -e '$g;$!d' $file
请注意,与示例一样,只有在文件包含模式时才能正常工作.否则,它输出整个文件.
以下是括号中的sed命令的详细信息:
> [H]将每一行附加到sed的“保留空间”,但不将其回显到stdout [d].
>当我们遇到模式时,[h]扔掉保持空间并从匹配线重新开始.
>当我们到达文件的末尾时,将保留空间复制到模式空间[g],以便它将回显到stdout.
另请注意,对于非常大的文件,它可能会变慢,因为任何单通道解决方案都需要在内存中保留一堆行.
Linux,打印文件中的所有行,而不是以
我想打印文件的内容,但是所有以#开头的行都想忽略。我正在尝试使用grep和awk进行操作,但是它一直在打印整个文件,或者只是打印以#开头的行。我可以以正确的方式推动我,也可以使用grep
/ awk命令在不以#开头的文件中打印任意行。
perl – 打开/处理目录中所有文件的最有效方法是什么?
水珠:
my $parse_corpus; #(for all options) ##glob (only if all files in same directory as script?): my @files = glob("parsed"."*.txt"); foreach my $file (@files) { open($parse_corpus,'<',"$file") or die $!; ... all my code... }
Readdir with while和条件:
##readdir: my $dir = '.'; opendir(DIR,$dir) or die $!; while (my $file = readdir(DIR)) { next unless (-f "$dir/$file"); ##Ensure it's a file next unless ($file =~ m/^parsed.*\.txt/); ##Ensure it's a parsed file open($parse_corpus,"$file") or die "Couldn't open directory $!"; ... all my code... }
Readdir with foreach和grep:
##readdir+grep: my $dir = '.'; opendir(DIR,$dir) or die $!; foreach my $file (grep {/^parsed.*\.txt/} readdir (DIR)) { next unless (-f "$dir/$file"); ##Ensure it's a file open($parse_corpus,"$file") or die "Couldn't open directory $!"; ... all my code... }
文件::查找:
##File::Find my $dir = "."; ##current directory: Could be (include quotes): '/Users/jon/Desktop/...' my @files; find(\&open_file,$dir); ##built in function sub open_file { push @files,$File::Find::name if(/^parsed.*\.txt/); } foreach my $file (@files) { open($parse_corpus,"$file") or die $!; ...all my code... }
还有另外一种方法吗?将我的整个脚本包含在循环中是否合适?可以,我不使用closedir吗?我把它传递给其他人,我不确定他们的文件将在哪里(可能无法使用glob)
非常感谢,希望这是一个正确的问题.
解决方法
纯粹的实用性,glob方法运作得相当好.在诉诸任何涉及的事情之前,我会问是否有问题.
如果你能够使用其他模块,另一种方法是让别人担心肮脏的细节:
use File::Util qw(); my $fu = File::Util->new; my @files = $fu->list_dir($dir,qw(--with-paths --files-only));
请注意,File :: Find执行递归搜索,下降到所有子目录.很多时候你不想要或不需要它.
我还要补充一点,我不喜欢你的两个readdir例子,因为它们混合了不同的功能:(1)获取文件名,(2)处理单个文件.我会将这些工作分开.
my $dir = '.'; opendir(my $dh,$dir) or die $!; # Use a lexical directory handle. my @files = grep { -f } map { "$dir/$_" } grep { /^parsed.*\.txt$/ } readdir($dh); for my $file (@files){ ... }
关于使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?和java 打印类型的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – 强制Idea生成R.Java文件的最简单的方法是什么?、linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行、Linux,打印文件中的所有行,而不是以、perl – 打开/处理目录中所有文件的最有效方法是什么?等相关内容,可以在本站寻找。
本文标签: