gpt4 book ai didi

java - 是否可以在线程可运行的声明中将文件写入交互式 shell?

转载 作者:行者123 更新时间:2023-11-30 02:50:14 24 4
gpt4 key购买 nike

我正在尝试启动交互式 shell,然后执行命令全部都在一个可运行的线程中。在可运行声明中,我什至无法创建新文件。

示例 1

if(true){
Process p = null;
try{
p=Runtime.getRuntime().exec("su");
BufferredWriter writer = new BufferedWriter(new
OutputStreamWriter(p.getOutputStream()));
writer.write("touch /data/local/tmp/file\n");
}
catch(Exception e){
}
}

示例 2

public void createNewThread(){
thread = new Thread(new Runnable(){
@Override
public void run(){
Process p = null;
try{
p = Runtime.getRuntime().exec("su");
BufferredWriter writer = new BufferedWriter(new
OutputStreamWriter(p.getOutputStream()));
writer.write("touch /data/local/tmp/somefile\n");
}
catch(Exception e){
}
}
});
thread.start();
}

在示例 1 和示例 2 中,我都可以看到已执行 su 并且交互式 shell 正在运行。但是,示例 1 中创建了 file,但示例 2 中未创建 somefile。通过可运行线程声明写入交互式 shell 是否存在问题?

最佳答案

这只是一个猜测,但也许您需要显式 writer.flush()

此外,您应该始终关闭流!这将具有自动调用flush()的额外效果。

try {
p=Runtime.getRuntime().exec("su");
BufferredWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
writer.write("touch /data/local/tmp/file\n");
} catch(Exception e) {
// handle exceptions
} finally {
writer.close(); // this will automatically call writer.flush()
}

关于java - 是否可以在线程可运行的声明中将文件写入交互式 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920581/

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