gpt4 book ai didi

java - 在 bash 中调用 Java 可执行文件

转载 作者:行者123 更新时间:2023-12-02 08:30:45 25 4
gpt4 key购买 nike

我想通过编译以下代码来调用Java类文件:

import java.io.*;

public class hex_to_dec {
private BufferedReader bufferedReader;
private BufferedWriter bufferedWriter;

public hex_to_dec (String stringPath, String stringPath_dec)
{
try
{
bufferedReader = new BufferedReader(new FileReader(stringPath));
bufferedWriter = new BufferedWriter(new FileWriter(stringPath_dec, false));
} catch (Exception e) {
System.out.println("Error in opening file." + e);
}
}
public void Parse()
{
try {
String tempLine;
int temp;
while((tempLine = bufferedReader.readLine()) != null) {
String[] tempBytes = tempLine.split(" ");
temp = Integer.valueOf(tempBytes[0], 16);
tempBytes[0] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[2], 16);
tempBytes[2] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[3], 16);
tempBytes[3] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[5], 16);
tempBytes[5] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[6], 16);
tempBytes[6] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[8], 16);
tempBytes[8] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[9], 16);
tempBytes[9] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[11], 16);
tempBytes[11] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[12], 16);
tempBytes[12] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[14], 16);
tempBytes[14] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[15], 16);
tempBytes[15] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[17], 16);
tempBytes[17] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[18], 16);
tempBytes[18] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[20], 16);
tempBytes[20] = String.valueOf(((byte) temp));
temp = Integer.valueOf(tempBytes[21], 16);
tempBytes[21] = String.valueOf((temp));
temp = Integer.valueOf(tempBytes[23], 16);
tempBytes[23] = String.valueOf(((byte) temp));

for (int i = 0; i < tempBytes.length; i++)
{
bufferedWriter.append(tempBytes[i] + " ");
}
bufferedWriter.append("\n");
}
bufferedWriter.flush();
} catch (Exception e) {
System.err.println("Error:" + e);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
hex_to_dec data = new hex_to_dec(
"C:\\Documents and Settings\\Admin\\My Documents\\MATLAB\\tests\\rssi_2\\trimmed\\s5_node12",
"C:\\Documents and Settings\\Admin\\My Documents\\MATLAB\\tests\\rssi_2\\trimmed_dec\\s5_node12");
data.Parse();
}
}

但是,它需要一个参数,而且我不知道如何传递参数来在 bash 中调用此命令清理。另外,我希望能够解析一个目录,以便通过所选目录的子目录下的所有文本文件递归地调用此函数。实现这一目标的最简单方法是什么?

提前致谢!希望这不是太苛刻。

最佳答案

我认为你在这里有几个步骤,首先是更改 main 以使用参数。您应该检查 args.length 以确保指定了源文件,例如:

(警告:未经 C 程序员测试的 java)

public static void main(String[] args)
{
if (args.length == 1)
{
hex_to_dec data = new hex_to_dec(args[0], args[0] + ".dec");
data.Parse();
}
}

一旦类接受参数,您将需要编译它。

javac hex_to_dec.java

编译完成后,您可以使用脚本递归地处理目录。

#!/bin/sh
find . | xargs -L 1 java hex_to_dec

请注意,如果您的目标是将十六进制数字文件转换为十进制,那么使用 java 和 bash 可能有点大材小用。您可以使用单个 shell 脚本来完成此操作,例如:

#!/bin/sh
find . -type f | while read filename
do

# skip the file if it is already decoded
if [ "${filename%.dec}" != "${filename}" -o -z "${filename}" ]
then
continue
fi

(
# read the file, line by line
cat "${filename}" | while read line
do
line=$(
echo "${line}" |
sed -e "s/[[:space:]]\{1,\}/;/g" | # split the line by spaces
tr '[:lower:]' '[:upper:]') # convert lower to uppercase

echo "ibase=16; ${line}" | # format the line for bc
bc | # convert hex to dec
tr "\n" " " # rejoin the output to a line

echo "" # add the new line
done
) > "${filename}.dec"
done

关于java - 在 bash 中调用 Java 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436907/

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