使用Node.js读取Java文件

时间:2019-05-03 14:19:51

标签: javascript node.js

我在目录中有一些.java文件,我想读取这些文件并在每个文件中获取一些值。我不确定如何进行。如何在节点js中使用fs模块和其他一些npm模块来做到这一点。

下面是我当前的代码

const path = require('path');
var fs = require('fs');

module.exports={
    readTS: function () {  

        var CWD = path.join(__dirname, '../');
        var folder = path.basename(CWD).toLowerCase();

        var TSJavaPath = path.join(__dirname, '../src/main/java/com/'+folder+'/');

        var files = fs.readdirSync(TSJavaPath).filter(fn => fn.startsWith('TS'));
        console.log(files);

        for(i=0;i<files;i++){
        //Read and get data
        }


    }
};

1 个答案:

答案 0 :(得分:0)

您可以编译.java文件并使用leonardosnt/java-class-tools读取它们。

您有HelloWorld.java-

public class HelloWorld {

  public static void main(String[] args) {
    System.out.println("Hello, World");
  }
}

然后编译-

javac HelloWorld.java

然后写一个快速的index.js-

const { JavaClassFileReader } = require('java-class-tools');

const reader = new JavaClassFileReader();
const classFile = reader.read('./HelloWorld.class');

classFile.methods.forEach(md => {
  /**
   * Method name in constant-pool.
   *
   * Points to a CONSTANT_Utf8_info structure: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.7
   */
  const nameInConstantPool = classFile.constant_pool[md.name_index];

  // To string (hacky)
  const name = String.fromCharCode.apply(null, nameInConstantPool.bytes);

  console.log(name);
});

输出以下内容-

node index.js
<init>
main