C#生成Jad文件源代码

在贴出C#生成Jad文件的源代码前我们先了解下几个知识点:

·JAR文件格式以流行的ZIP文件格式为基础,用于将许多个文件聚集为一个文件;
·大多数JAR文件包含一个META-INF\MANIFEST.MF文件,它定义了与扩展和包相关的数据;
·JAD文件是一个文本文件,用于描述JAR文件,和MANIFEST.MF文件相比,它通常多了MIDlet-Jar-Size和MIDlet-Jar-URL两个属性;

C#生成Jad文件的源代码:
/// <summary>
/// 生成JAD文件
/// </summary>
/// <param name="jarfile">JAR文件路径</param>
private void JADMaker(string jarfile)
{
    if (File.Exists(jarfile))
    {
        FileInfo jarinfo = new FileInfo(jarfile);
        string jadfile = Path.ChangeExtension(jarinfo.FullName, ".jad");

        try
        {
            //1.调用WinZip从JAR包中解压出 MANIFEST.MF
            Process process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.FileName = "WZUNZIP.EXE";
            process.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
            process.StartInfo.Arguments = "\"" + jarfile + "\"" + " " + "\"META-INF\\MANIFEST.MF\"";
            process.Start();
            process.WaitForExit(10000);
            string message = process.StandardOutput.ReadToEnd().ToLower();
            process.Close();

            if (message.IndexOf("unzipping ") != -1 && File.Exists(Path.Combine(Environment.CurrentDirectory, "MANIFEST.MF")))
            {
                //2.在 MANIFEST.MF 基础上加入MIDlet-Jar-Size和MIDlet-Jar-URL两个属性

                /* 以下代码生成的jad无法安装,提示:缺少必需的属性
                string info = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "MANIFEST.MF"), Encoding.UTF8);
                info = string.Format("MIDlet-Jar-Size: {0}\r\nMIDlet-Jar-URL: {1}\r\n{2}",jarinfo.Length,jarinfo.Name,info);

                File.WriteAllText(jadfile, info, Encoding.UTF8);
                */

                FileStream stream = File.Create(jadfile);
                StreamWriter writer = new StreamWriter(stream);
                FileStream stream2 = File.Open(Path.Combine(Environment.CurrentDirectory, "MANIFEST.MF"), FileMode.Open);
                StreamReader reader = new StreamReader(stream2);
                writer.WriteLine("MIDlet-Jar-Size: " + jarinfo.Length.ToString());
                writer.WriteLine("MIDlet-Jar-URL: " + jarinfo.Name);
                string str2 = string.Empty;
                while ((str2 = reader.ReadLine()) != null)
                {
                    writer.WriteLine(str2);
                }
                reader.Close();
                writer.Close();
                stream2.Close();
                stream.Close();

                File.Delete(Path.Combine(Environment.CurrentDirectory, "MANIFEST.MF"));

                MessageBox.Show("完成!");
            }
            else
            {
                MessageBox.Show("MANIFEST.MF 文件提取失败!");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    else
    {
        MessageBox.Show(jarfile + " 不存在!");
    }
}


参考文章

JAR 文件揭密:http://www.ibm.com/developerworks/cn/java/j-jar/
根据MIDlet套件(Jar文件)自动生成jad文件:http://www.knowsky.com/362909.html
MANIFEST.MF 文件内容详解:http://blog.csdn.net/hcx_2008/archive/2007/09/04/1772413.aspx
C# 根据jar游戏文件生成jad的dll类库:http://www.cnblogs.com/suyuan/archive/2008/12/26/1363244.html

评论: 0 | 引用: 0 | 查看次数: 3720
发表评论
登录后再发表评论!