第二个JAVA ME程序----批量添加后缀

这是一个用于批量为文件添加特定后缀的小程序。用户可以自定义文件夹路径及后缀名,程序将遍历指定文件夹内的所有文件并为其添加指定的后缀。
作用:为指定文件夹的每个文件添加设定的后缀(jar好像不行,我也不知道为什么)
还不是很完美,这个程序就这样吧,下个程序再学习去了。

文件结构:
Replace类--------主类
AddSuffix类------添加后缀
Config类---------设置文件夹,后缀
RMS类------------保存设置
ConfigThread类---没有用到,就不贴了


//Replace类
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Replace extends MIDlet implements CommandListener {
final private String help = "如果不设置并且以前没设置过,就默认为E:/UCDownloaded/Z/里的文件添加.jar,否则以你设置后的为准。";
final private String about = "作者:kyda\n版本:v1.1\nAll rights reserved.\n如果你有什么好的建议请站内信\n我的ID:jimieaaa";
// final static int dirnum = 1, sufnum = 2;

private Display display;
private Command exitCommand, actCommand, configCommand, helpCommand, aboutCommand;
private Form fm;
private Alert helpAlert, aboutAlert;
static public String sDir, sSuf;
private RMS rms;
private AddSuffix addSuffix;
private Config config;

public Replace() {
rms = new RMS();
sDir = rms.getConfig(1);
sSuf = rms.getConfig(2);
display = Display.getDisplay(this);
fm = new Form("批量添加后缀");

exitCommand = new Command("退出", Command.EXIT, 2);
actCommand = new Command("替换", Command.OK, 2);
configCommand = new Command("设置", Command.ITEM, 2);
helpCommand = new Command("帮助", Command.ITEM, 2);
aboutCommand = new Command("关于", Command.ITEM, 2);

fm.addCommand(exitCommand);
fm.addCommand(actCommand);
fm.addCommand(configCommand);
fm.addCommand(helpCommand);
fm.addCommand(aboutCommand);

}

public void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

public void pauseApp() {

}

public void startApp() throws MIDletStateChangeException {
//fm.append("sDir = " + sDir + "\nsSuf = " + sSuf + "\n");
fm.append("这是批量添加设定后缀的程序。\n\n");
//fm.append("还有点小bug,设置写好后按确定,然后再进入设置,这次按取消。这样就可以正常操作了。\n");
fm.append("请选择操作:\n");
display.setCurrent(fm);
fm.setCommandListener(this);

}

public void commandAction(Command cmd, Displayable arg1) {
if (cmd == exitCommand) {
try {
rms.closeRMS();
destroyApp(false);
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
notifyDestroyed();
} else if (cmd == actCommand) {
addSuffix = new AddSuffix(sDir, sSuf);
addSuffix.Replace(fm);
} else if (cmd == configCommand) {
//fm.append("sDir = " + sDir + "\nsSuf = " + sSuf + "\n");
config = new Config(display, fm, sDir, sSuf);
// configThread.start();
// try {
// configThread.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// sDir = rms.getConfig(1);
// sSuf = rms.getConfig(2);
} else if (cmd == helpCommand) {
helpAlert = new Alert("帮助", help, null, AlertType.INFO);
display.setCurrent(helpAlert);
} else if (cmd == aboutCommand) {
aboutAlert = new Alert("关于", about, null, AlertType.CONFIRMATION);
display.setCurrent(aboutAlert);
}

}
}



//AddSuffix类
import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.lcdui.Form;

public class AddSuffix {
private FileConnection fc, oldfile;
private Enumeration enums = null;
private String str, sName, sDir = "file:///", sSuf = ".", newfile = "";
private int mode;

public AddSuffix(String dir, String suf) {
sDir += dir;
sSuf += suf;
mode = 1;
}

public AddSuffix(String dir, String name, String suf) {
sDir += dir;
sName = name;
sSuf += suf;
mode = 2;
}

public void Replace(Form fm) {
fm.append("正在打开中...\n");
try {
fc = (FileConnection) Connector.open(sDir, Connector.READ);

if (!fc.exists()) {
fm.append("no folder!\n");
return;
}
enums = fc.list();

while (enums.hasMoreElements()) {
str = enums.nextElement().toString();
if (mode == 1)
sName = str;
try {
oldfile = (FileConnection) Connector.open(sDir + str, Connector.READ_WRITE);
newfile = sName + sSuf;
try {
oldfile.rename(newfile);
} catch (IOException e) {
fm.append(str + " 重命名失败!!!\n");
oldfile.close();
continue;
}
oldfile.close();
fm.append("重命名 " + str + " 成功!\n");
} catch (IOException e) {
fm.append("文件" + str + "打开失败!\n");
continue;
}
}
fc.close();
fm.append("添加后缀完成!\n");
} catch (IOException e) {
fm.append("文件夹打开失败!\n");
e.printStackTrace();
}
}
}



//Config类
import javax.microedition.lcdui.*;

public class Config implements CommandListener {
private Display display;
private TextField textFieldDir, textFieldSuf;
private Form configForm, fm;
private Command okCommand, cancelCommand;
private RMS rms;
private boolean isok = false;

public Config() {

}

public Config(Display display, Form fm, String dir, String suf) {

configForm = new Form("设置");
textFieldDir = new TextField("设置文件夹:", dir, 100, TextField.ANY);
configForm.append(textFieldDir);
textFieldSuf = new TextField("要添加的后缀:", suf, 10, TextField.ANY);
configForm.append(textFieldSuf);
configForm.append("\n\n注意:文件夹后要加'/'\n 后缀不要加'.'\n");

okCommand = new Command("确定", Command.OK, 2);
cancelCommand = new Command("取消", Command.CANCEL, 2);
configForm.addCommand(okCommand);
configForm.addCommand(cancelCommand);

this.display = display;
this.fm = fm;

configForm.setCommandListener(this);
display.setCurrent(configForm);
}

public boolean isOK() {
return isok;
}

public void commandAction(Command cmd, Displayable arg1) {
if (cmd == okCommand) {
rms = new RMS();
rms.setConfig(1, textFieldDir.getString());
rms.setConfig(2, textFieldSuf.getString());
//这里一直不能实现阻塞,只能用static的了,再学习去了
Replace.sDir = rms.getConfig(1);
Replace.sSuf = rms.getConfig(2);
rms.closeRMS();
isok = true;
display.setCurrent(fm);
} else if (cmd == cancelCommand) {
isok = true;
display.setCurrent(fm);
}
}

}



//RMS类
import javax.microedition.rms.*;

public class RMS {
final private String fDir = "E:/UCDownloaded/Z/";
final private String fSuf = "jar";
private RecordStore rms;
private String str = "";
private byte[] record = null;

public RMS() {
try {
rms = RecordStore.openRecordStore("Config", true);
if (rms.getNumRecords() == 0) {
record = fDir.getBytes();
rms.addRecord(record, 0, record.length);
record = fSuf.getBytes();
rms.addRecord(record, 0, record.length);
}
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}

public String getConfig(int i) {
try {
record = rms.getRecord(i);
str = new String(record);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
return str;
}

public void setConfig(int i, String s) {
record = s.getBytes();
try {
rms.setRecord(i, record, 0, record.length);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}

public void closeRMS() {
try {
rms.closeRecordStore();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
}
在数字化环境中,线上票务获取已成为参与各类活动的主要途径。随着公众对热门演出需求的增长,票源往往在开放销售后迅速告罄,导致普通消费者难以顺利购得所需票券。为应对这一挑战,部分技术开发者借助编程手段构建了自动化购票辅助程序,旨在提升用户成功获取门票的概率。本文将以一个针对特定票务平台设计的自动化工具为例,系统阐述其设计理念、技术组成及具体实施流程。 秀动网作为国内知名的演出及体育赛事票务销售平台,因活动热度较高,常出现访问拥堵、瞬时抢购压力大等现象,使得常规购票过程面临困难。因此,开发一款能够协助用户更有效完成票务申购的辅助工具具有实际意义。 该工具主要具备以下几项关键功能:持续监控目标平台的票务信息更新;在票务释放时自动执行选座、添加至购物车及提交订单等系列操作;集成一定的异常处理机制,以应对网络延迟或服务器响应异常等情况。 在技术实现层面,选用Python作为开发语言,主要基于其语法简洁、标准库与第三方资源丰富,适合快速构建功能原型。同时,Python在网络通信与浏览器自动化方面拥有如requests、selenium等成熟支持库,为程序实现网页交互与数据抓取提供了便利。 开发过程主要包括以下环节:首先解析目标网站的页面结构,明确可通过程序操控的网页元素路径;随后编写监控模块,实时检测新票务信息的上线并及时触发后续操作;接着模拟用户操作流程,包括自动填写个人信息、选择座位偏好、完成购物车添加等步骤,并通过行为模拟降低被平台反爬虫机制识别的可能;最终实现订单自动提交,并在成功购票后向用户发送通知。 此外,该工具提供了可配置的操作界面,允许用户根据个人需求设定抢票时间、目标活动类型及座位选择等参数,从而在提升使用体验的同时,减少对票务平台服务器资源的非必要占用。 需指出的是,尽管此类工具能提高购票效率,但其使用可能涉及违反平台服务协议或相关法规的风险。各票务销售方通常对自动化抢票行为设有明确约束,因此开发与使用者均应遵守相应规定,确保技术应用的合法性。 综上所述,该基于Python的票务辅助工具是针对特定场景设计的自动化解决方案,通过技术手段改善用户购票体验,但同时也强调必须在法律与平台规则框架内合理使用此类技术。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值