GVKun编程网logo

使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?(java 打印类型)

5

最近很多小伙伴都在问使用Java8,打印文件中所有行的最优选,最简洁的方法是什么?和java打印类型这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android–强制Idea生成

最近很多小伙伴都在问使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?java 打印类型这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android – 强制Idea生成R.Java文件的最简单的方法是什么?、linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行、Linux,打印文件中的所有行,而不是以、perl – 打开/处理目录中所有文件的最有效方法是什么?等相关知识,下面开始了哦!

本文目录一览:

使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?(java 打印类型)

使用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文件的最简单的方法是什么?

android – 强制Idea生成R.Java文件的最简单的方法是什么?

我试图使用intellij想法运行 Android示例应用程序,而R.Java文件缺少表单记事本样本源目录.

解决方法

确保您的项目根目录中有gen文件夹.如果没有,请自己做一个.

linux – 简洁的方式将所有行打印到与给定模式匹配的最后一行

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的解决方案.要打印$file中与$pattern匹配的最后一行开头的每一行:
sed -e "H;/${pattern}/h" -e '$g;$!d' $file

请注意,与示例一样,只有在文件包含模式时才能正常工作.否则,它输出整个文件.

以下是括号中的sed命令的详细信息:

> [H]将每一行附加到sed的“保留空间”,但不将其回显到stdout [d].
>当我们遇到模式时,[h]扔掉保持空间并从匹配线重新开始.
>当我们到达文件的末尾时,将保留空间复制到模式空间[g],以便它将回显到stdout.

另请注意,对于非常大的文件,它可能会变慢,因为任何单通道解决方案都需要在内存中保留一堆行.

Linux,打印文件中的所有行,而不是以

Linux,打印文件中的所有行,而不是以

我想打印文件的内容,但是所有以#开头的行都想忽略。我正在尝试使用grep和awk进行操作,但是它一直在打印整个文件,或者只是打印以#开头的行。我可以以正确的方式推动我,也可以使用grep
/ awk命令在不以#开头的文件中打印任意行。

perl – 打开/处理目录中所有文件的最有效方法是什么?

perl – 打开/处理目录中所有文件的最有效方法是什么?

我需要在目录的所有文件上执行我的脚本(搜索).以下是有效的方法.我只是问哪个是最好的. (我需要表单的文件名:parsedchpt31_4.txt)

水珠:

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 – 打开/处理目录中所有文件的最有效方法是什么?等相关内容,可以在本站寻找。

本文标签: