Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Ant目标中使用文件大小_Java_Ant_Filesize - Fatal编程技术网

Java 如何在Ant目标中使用文件大小

Java 如何在Ant目标中使用文件大小,java,ant,filesize,Java,Ant,Filesize,我目前正在用Ant构建脚本替换homebrewn构建脚本 现在,我需要根据特定文件的大小替换各种令牌。我知道如何通过任务获取以字节为单位的大小并将其存储在属性中,但我也需要以千字节和兆字节为单位的大小 如何访问其他表示形式(KB、MB)中的文件大小,或从Ant目标中计算这些值并将其存储在属性中 编辑:在我发现了任务之后,使用一些JavaScript计算其他值并使用project.setNewProperty(“foo”,“bar”)向项目添加新属性是相当容易的有一个可能有用的数学任务我找到了一个

我目前正在用Ant构建脚本替换homebrewn构建脚本

现在,我需要根据特定文件的大小替换各种令牌。我知道如何通过
任务获取以字节为单位的大小并将其存储在属性中,但我也需要以千字节和兆字节为单位的大小

如何访问其他表示形式(KB、MB)中的文件大小,或从Ant目标中计算这些值并将其存储在属性中


编辑:在我发现了
任务之后,使用一些JavaScript计算其他值并使用
project.setNewProperty(“foo”,“bar”)向项目添加新属性是相当容易的

有一个可能有用的数学任务

我找到了一个解决方案,它不需要任何第三方库或自定义任务,使用允许在Ant目标中使用JavaScript(或任何其他或支持的语言)

<target name="insert-filesize">
    <length file="${afile}" property="fs.length.bytes" />

    <script language="javascript">
    <![CDATA[
        var length_bytes = project.getProperty("fs.length.bytes");
        var length_kbytes = Math.round((length_bytes / 1024) * Math.pow(10,2))
                          / Math.pow(10,2);
        var length_mbytes = Math.round((length_kbytes / 1024) * Math.pow(10,2))
                          / Math.pow(10,2);
        project.setNewProperty("fs.length.kb", length_kbytes);
        project.setNewProperty("fs.length.mb", length_mbytes);
    ]]>
    </script>

    <copy todir="${target.dir}">
        <fileset dir="${source.dir}">
            <include name="**/*" />
            <exclude name="**/*.zip" />
        </fileset>
        <filterset begintoken="$$$$" endtoken="$$$$">
            <filter token="SIZEBYTES" value="${fs.length.bytes}"/>
            <filter token="SIZEKILOBYTES" value="${fs.length.kb}"/>
            <filter token="SIZEMEGABYTES" value="${fs.length.mb}"/>
        </filterset>
    </copy>
</target>


谢谢,但我找到了一个不需要额外库的解决方案。脚本当然是更好的方法,我还不知道Ant支持的beanshell。谢谢你提供的信息。如果你能把你写的脚本作为答案发布,那就太好了。实际上这是个好主意。我已经在下面发布了我的解决方案。当JavaScript被删除时,我们有什么替代方案?