试用Retrotranslator

公司产品在JDK1.5下开发、不支持JDK1.4,由于用户需求,现在要“降级”——兼容JDK1.4,同事推荐了 Retrotranslator,也就没有再研究比较类似工具 RetroweaverJBossRetro

Retrotranslator是一个Java字节码转换工具。它能够把用JDK1.5编译的Java Class转换成可运行在JVM1.4。支持的Java 5.0特性包括:泛型、注释、枚举、可变参数个数、自动装箱/拆箱、增强式的for循环、静态导入、并行工具(Concurrency Utilities)、增强的collections框架。
但是Retrotranslator只支持Java 5.0新特性,不支持Java 5.0里新的API(参见Retrotranslator文档中的“In other Java environments only the Java 5.0 features that don't depend on the new API are supported.”,同事也测试过)。

现在有一个结构复杂的目录,里面大批量的.jar(没有单独存在的.class文件)都需要进行处理,写了一个Java类来处理。
说明:
(1) 假设将Retrotranslator-1.2.6-bin.zip解压到H:/Retrotranslator-1.2.6-bin
(2) 源和目的目录分别是H:/from和H:/to
代码:
import  java.io.BufferedInputStream;
import  java.io.BufferedOutputStream;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.OutputStream;

public   class  Test  ... {

  
private static String suffix = ".jar";

  
private static String srcDir = "H:" + File.separator + "from";

  
private static String desDir = "H:" + File.separator + "to";

  
private static String jarFile = "H:" + File.separator + "Retrotranslator-1.2.6-bin" + 
                                                     File.separator 
+ "retrotranslator-transformer-1.2.6.jar";

  
public static void main(String[] args) ...{
    File srcDirFile 
= new File(srcDir);
    File desDirFile 
= new File(desDir);
    handle(srcDirFile, desDirFile);
  }


  
private static void handle(File from, File to) ...{
    
byte[] b = new byte[2048];
    
if (from.isFile()) ...{
      String fileName 
= from.getName();
      
if (!fileName.endsWith(suffix)) ...{
        
try ...{
          InputStream in 
= new BufferedInputStream(new FileInputStream(from));
          OutputStream out 
= new BufferedOutputStream(new FileOutputStream(to));
          
int read;
          
while ((read = in.read(b)) != -1...{
            out.write(b, 
0, read);
          }

          out.flush();
          in.close();
          out.close();
        }

        
catch (Exception e) ...{
          e.printStackTrace();
        }

      }

      
else ...{
        
try ...{
          Runtime.getRuntime().exec(
"java -jar " + jarFile + " -srcjar " + 
                                                             from.getPath() 
+ " -destjar " + to.getPath());
        }

        
catch (IOException e) ...{
          e.printStackTrace();
        }

      }

    }

    
else if (from.isDirectory()) ...{
      File[] handledFiles 
= from.listFiles();
      to.mkdir();
      
for (int i = 0; i < handledFiles.length; i++...{
        handle(handledFiles[i], 
new File(to, handledFiles[i].getName()));
      }

    }

  }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值