gpt4 book ai didi

java - 从 Java 运行 AWK 创建文件并使用 BufferedReader 读取它

转载 作者:行者123 更新时间:2023-12-01 14:19:30 25 4
gpt4 key购买 nike

我试图从另一个将被排序的纯文本文件创建一个 CSV 文件,然后我尝试使用 BufferedReader 读取它。问题是它是同时运行还是先执行 AWK 部分然后读取..

AWK文件创建部分:

String uniqueSubscribersCommand = "cat " + originalFile +
" | awk '$1~/^[0-9]*$/ {print $0}' | sort -k 1 | awk '{print $1}' | uniq >> " +
uniqueFile;
try
{
Runtime.getRuntime().exec( new String[]{"/bin/sh", "-c", uniqueSubscribersCommand} );
}
catch ( IOException e )
{
logger.error( "Error during unique subscriber determination" );
}

阅读部分,紧接在创建部分之后:

FileInputStream uniqueFis = new FileInputStream( uniqueFile );
BufferedReader brUnique = new BufferedReader( new InputStreamReader( uniqueFis ) );
while ( ( subscriberId = brUnique.readLine() ) != null )
{
// do stuff
}

我特别想知道如果我在运行 AWK 命令后立即将线程置于 sleep 状态,那么 Java 是否可以在创建文件时读取该文件,这样它会在创建和读取之间创建 10 秒的间隙。

感谢您的建议!

最佳答案

尝试以下操作 - 只是大致了解如何完成此操作。我实际上并没有非常小心地关闭未关闭的流等。但请确保你这样做。也许您可以使用随机访问文件中的缓冲区更有效地读取数据,但我也没有处理过。对此感到抱歉。

注意:以下示例只是 SSCCP这是一个示例,您可以测试读取可以从外部更改的文件,然后在控制台中获得更新。如果它有效,或者您认为值得,您可能可以根据您提到的用例改进它,一个线程写入文件,另一个线程读取。

        import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

public class ReadFromFile {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {

Runnable runnable = new Runnable() {

//it's your choice how will you close the channel
FileChannel in = null;

@Override
public void run() {
long lastChannelPos = 0L;
try {
/*
*I assume you will run it forever
*if you don't want to run it forever
*put a condition over here in the while loop.
*/
while (true) {
RandomAccessFile raf = new RandomAccessFile(
"your_file_loc", "r");
raf.seek(lastChannelPos);
int c = 0;
StringBuffer sb = new StringBuffer();
while ((c = raf.read()) != -1) {
sb.append((char) c);
}
in = raf.getChannel();
lastChannelPos = in.position();

if (!sb.toString().trim().isEmpty()) {
//you can print or use the output as you wish
//for simplicity I'm printing it
System.out.print(sb.toString().trim());
}
Thread.sleep(1000);
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

};

Thread th = new Thread(runnable);
th.start();
}

希望这有帮助。

关于java - 从 Java 运行 AWK 创建文件并使用 BufferedReader 读取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com