package com.prase.email.four; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; public class PraseMimeMessage{ private MimeMessage mimeMessage=null; private String saveAttachPath="";//附件下载后的存放目录 private StringBuffer bodytext=new StringBuffer(); //存放邮件内容的StringBuffer对象 private String dateformat="yy-MM-dd HH:mm";//默认的日前显示格式 /** * 构造函数,初始化一个MimeMessage对象 */ public PraseMimeMessage() { } public PraseMimeMessage(MimeMessage mimeMessage) { this.mimeMessage=mimeMessage; } public void setMimeMessage(MimeMessage mimeMessage){ this.mimeMessage=mimeMessage; } /** * 获得发件人的地址和姓名 */ public String getFrom1()throws Exception{ InternetAddress address[]=(InternetAddress[])mimeMessage.getFrom(); String from=address[0].getAddress(); if(from==null){ from=""; } String personal=address[0].getPersonal(); if(personal==null){ personal=""; } String fromaddr=personal+"<"+from+">"; return fromaddr; } /** * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 * "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址 * @throws Exception */ public String getMailAddress(String type){ String mailaddr=""; try { String addtype=type.toUpperCase(); InternetAddress []address=null; if(addtype.equals("TO")||addtype.equals("CC")||addtype.equals("BBC")){ if(addtype.equals("TO")){ address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO); } else if(addtype.equals("CC")){ address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC); } else{ address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC); } if(address!=null){ for (int i = 0; i < address.length; i++) { String email=address[i].getAddress(); if(email==null)email=""; else{ email=MimeUtility.decodeText(email); } String personal=address[i].getPersonal(); if(personal==null)personal=""; else{ personal=MimeUtility.decodeText(personal); } String compositeto=personal+"<"+email+">"; mailaddr+=","+compositeto; } mailaddr=mailaddr.substring(1); } } else{ } } catch (Exception e) { // TODO: handle exception } return mailaddr; } /** * 获得邮件主题 */ public String getSubject() { String subject=""; try { subject=MimeUtility.decodeText(mimeMessage.getSubject()); if(subject==null)subject=""; } catch (Exception e) { // TODO: handle exception } return subject; } /** * 获得邮件发送日期 */ public String getSendDate()throws Exception{ Date senddate=mimeMessage.getSentDate(); SimpleDateFormat format=new SimpleDateFormat(dateformat); return format.format(senddate); } /** * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析 */ public void getMailContent(Part part)throws Exception{ String contenttype=part.getContentType(); int nameindex=contenttype.indexOf("name"); boolean conname=false; if(nameindex!=-1)conname=true; if(part.isMimeType("text/plain")&&!conname){ bodytext.append((String)part.getContent()); }else if(part.isMimeType("text/html")&&!conname){ bodytext.append((String)part.getContent()); } else if(part.isMimeType("multipart/*")){ Multipart multipart=(Multipart)part.getContent(); int counts=multipart.getCount(); for(int i=0;i<counts;i++){ getMailContent(multipart.getBodyPart(i)); } }else if(part.isMimeType("message/rfc822")){ getMailContent((Part)part.getContent()); } else{} } /** * 获得邮件正文内容 */ public String getBodyText(){ return bodytext.toString(); } /** * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false" * @throws MessagingException */ public boolean getReplySign() throws MessagingException{ boolean replysign=false; String needreply[]=mimeMessage.getHeader("Disposition-Notification-To"); if(needreply!=null){ replysign=true; } return replysign; } /** * 获得此邮件的Message-ID * @throws MessagingException */ public String getMessageId() throws MessagingException{ return mimeMessage.getMessageID(); } /** * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】 * @throws MessagingException */ public boolean isNew() throws MessagingException{ boolean isnew =false; Flags flags=((Message)mimeMessage).getFlags(); Flags.Flag[]flag=flags.getSystemFlags(); for (int i = 0; i < flag.length; i++) { if(flag[i]==Flags.Flag.SEEN){ isnew=true; break; } } return isnew; } /** * 判断此邮件是否包含附件 * @throws MessagingException */ public boolean isContainAttach(Part part) throws Exception{ boolean attachflag=false; String contentType=part.getContentType(); if(part.isMimeType("multipart/*")){ Multipart mp=(Multipart)part.getContent(); //获取附件名称可能包含多个附件 for(int j=0;j<mp.getCount();j++){ BodyPart mpart=mp.getBodyPart(j); String disposition=mpart.getDescription(); if((disposition!=null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){ attachflag=true; }else if(mpart.isMimeType("multipart/*")){ attachflag=isContainAttach((Part)mpart); }else{ String contype=mpart.getContentType(); if(contype.toLowerCase().indexOf("application")!=-1) attachflag=true; if(contype.toLowerCase().indexOf("name")!=-1) attachflag=true; } } }else if(part.isMimeType("message/rfc822")){ attachflag=isContainAttach((Part)part.getContent()); } return attachflag; } /** * 【保存附件】 * @throws Exception * @throws IOException * @throws MessagingException * @throws Exception */ public void saveAttachMent(Part part) throws Exception { String fileName=""; if(part.isMimeType("multipart/*")){ Multipart mp=(Multipart)part.getContent(); for(int j=0;j<mp.getCount();j++){ BodyPart mpart=mp.getBodyPart(j); String disposition=mpart.getDescription(); if((disposition!=null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){ fileName=mpart.getFileName(); if(fileName.toLowerCase().indexOf("GBK")!=-1){ fileName=MimeUtility.decodeText(fileName); } saveFile(fileName,mpart.getInputStream()); } else if(mpart.isMimeType("multipart/*")){ fileName=mpart.getFileName(); } else{ fileName=mpart.getFileName(); if((fileName!=null)){ fileName=MimeUtility.decodeText(fileName); saveFile(fileName,mpart.getInputStream()); } } } } else if(part.isMimeType("message/rfc822")){ saveAttachMent((Part)part.getContent()); } } /** * 【设置附件存放路径】 */ public void setAttachPath(String attachpath){ this.saveAttachPath=attachpath; } /** * 【设置日期显示格式】 */ public void setDateFormat(String format){ this.dateformat=format; } /** * 【获得附件存放路径】 */ public String getAttachPath() { return saveAttachPath; } /** * 【真正的保存附件到指定目录里】 */ private void saveFile(String fileName,InputStream in)throws Exception{ String osName=System.getProperty("os.name"); String storedir=getAttachPath(); String separator=""; if(osName==null)osName=""; if(osName.toLowerCase().indexOf("win")!=-1){ //如果是window 操作系统 separator="/"; if(storedir==null||storedir.equals(""))storedir="c:\tmp"; } else{ //如果是其他的系统 separator="/"; storedir="/tmp"; } File strorefile=new File(storedir+separator+fileName); BufferedOutputStream bos=null; BufferedInputStream bis=null; try { bos=new BufferedOutputStream(new FileOutputStream(strorefile)); bis=new BufferedInputStream(in); int c; while((c=bis.read())!=-1){ bos.write(c); bos.flush(); } } catch (Exception e) { // TODO: handle exception }finally{ bos.close(); bis.close(); } } /** * PraseMimeMessage类测试 * @throws Exception */ public static void main(String[] args) throws Exception { // String host="mail.21gmail.com"; // String username="fjj0@21gmail.com"; // String password="123456789"; Properties props=new Properties(); //使用网络代理 props.setProperty("proxySet","true"); props.setProperty("ProxyHost","10.24.5.105"); props.setProperty("ProxyPort","39002"); Session session=Session.getDefaultInstance(props,null); Store store=session.getStore("pop3"); store.connect(host,username,password); Folder folder=store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[]=folder.getMessages(); PraseMimeMessage pmm=null; for (int i = 0; i < message.length; i++) { System.out.println("****************************************第"+(i+1)+"封邮件**********************************"); pmm=new PraseMimeMessage((MimeMessage)message[i]); System.out.println("主题 :"+pmm.getSubject()); pmm.setDateFormat("yy年MM月dd日 HH:mm"); System.out.println("发送时间 :"+pmm.getSendDate()); System.out.println("是否回执 :"+pmm.getReplySign()); System.out.println("是否包含附件 :"+pmm.isContainAttach((Part)message[i])); System.out.println("发件人 :"+pmm.getFrom1()); System.out.println("收件人 :"+pmm.getMailAddress("TO")); System.out.println("抄送地址 :"+pmm.getMailAddress("CC")); System.out.println("密送地址 :"+pmm.getMailAddress("BCC")); System.out.println("邮件ID :"+i+":"+pmm.getMessageId()); pmm.getMailContent((Part)message[i]); //根据内容的不同解析邮件 pmm.setAttachPath("d:/temp"); //设置邮件附件的保存路径 pmm.saveAttachMent((Part)message[i]); //保存附件 System.out.println("邮件正文 :"+pmm.getBodyText()); System.out.println("*********************************第"+(i+1)+"封邮件结束*************************************"); } } }
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
public class MutilTimer
{
//定时器
private static Timer timer = new Timer();
private static final long confirmTime = 5*1000;
//类变量
private static MutilTimer multilTimer = new MutilTimer();
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args)
{
multilTimer.init();
}
private static long wait = 3000l;
private void init()
{
long repeatedWait = wait + confirmTime;
timer.schedule(new TimerTask() {
@Override
public void run() {
exec();
}
},wait);
timer.schedule(new TimerTask() {
@Override
public void run() {
wait += 1000l;
init();
}
},repeatedWait);
}
private void exec()
{
System.out.println("hello, runTime is " + sdf.format(System.currentTimeMillis()));
}
}
C写文件
c读文件
编写编码器应用的流程
1.明确需求
2.研究技术实现 如果没有做过 需要进行一定时间的调研,如果还不能ok 只能想办法绕过这个知识点实现需求
3.实施:
-1 研究c源码解码器的工作过程,找到核心代码 找到入口等
-2将核心代码放入jni然后编译 注意头文件的引入
-3测试
注意android需要在
LOCAL_SRC_FILES 描述中把所有的c文件都知名 可以做个 程序获取
这次老师代码有个不好的地方是没有吧解码器的代码进行封装 如果封装成一个方法 然后输入文件输出文件就可以了
另外
含有进度的进度条有两种 一种是真正计算出来的进度去 一种是估算出来的 会在99%哪里卡住.