下载 >  开发技术 >  C > 数据结构课程设计自选课题之文本阅读器

数据结构课程设计自选课题之文本阅读器

这是用于阅读文本文档的程序,可以实现基本的分页阅读,插入书签,删除书签功能,但是对文本文档一定要是ASCII编码的,如果不是要转换下编码格式,就是这个不方便,其他的还蛮强大的
2009-06-12 上传大小:1.18MB
分享
收藏 举报
java数据结构课程设计(2个选题,内附源码和详细的设计报告)

我自己的java数据结构课程设计 共2个选题 1.利用线程计数比较多种排序算法 2.文本编辑器 内附源码 详细的设计报告 jar文件

立即下载
数据结构课程设计案例精编

数据结构课程设计中的一些经典案例,可供参考

立即下载
数据结构课程设计文本格式化

上传一个文本格式化的课程设计报告,希望可以帮助大家哟~

立即下载
数据库课程设计题目16个经典课题

数据库课程设计题目16个经典实例

立即下载
数据结构课程设计--文本格式化(c编写)

数据结构课程设计--文本格式化(c编写) 内有源文件 可执行文件 实验报告

立即下载
一个非常简单的单片机课程设计实例

一个可以显示时间、温度的报警闹铃系统。实现了日期滚动显示,温度滚动显示。一些小的方面还需要自己去完善一下。

立即下载
数据结构课程设计课题

数据结构试验课程设计\综合实验七___魔王语言解释

立即下载
51单片机课程设计题目大全

51单片机资料\经典单片机课程设计题目大全(大学教授珍藏资料)

立即下载
C++课程设计贪吃蛇源码+课设报告

C++课程设计贪吃蛇源码附带详细注释+该程序的课设报告。这是我曾经使用过进行C++课程设计的代码,有注释+课设报告,保证轻松完成答辩

立即下载
数据结构实验课题文章编辑

数据结构集中上机自选课题文章编辑器。 大家喜欢就下吧 我也是从别的地方收集的

立即下载
非常好用的TXT文本阅读器

小而且非常好用的TXT文本阅读器 界面看的非常舒服 字体大小,背景颜色均可调

立即下载
TXT阅读器MFC实现

TXT 阅读器 文本阅读器TXT 阅读器 文本阅读器TXT 阅读器 文本阅读器TXT 阅读器 文本阅读器TXT 阅读器 文本阅读器

立即下载
txt文档阅读器

package cn.huang.my_txtreader; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.io.UnsupportedEncodingException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.text.DecimalFormat; import java.util.Vector; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Align; public class BookPageFactory { //把字体绘制到界面上 private File book_file = null; private MappedByteBuffer m_mbBuf = null;//MappedByteBuffer 将文件直接映射到内存 private int m_mbBufLen = 0; private int m_mbBufBegin = 0; private int m_mbBufEnd = 0; private String m_strCharsetName = "gbk";//文本格式 private Bitmap m_book_bg = null;//文本图像 private int mWidth; private int mHeight; private Vector<String> m_lines = new Vector<String>(); //用于一行一行显示 private int m_fontSize = 24; private int m_textColor = Color.BLACK;//字体颜色 private int m_backColor = 0xffff9e85; // 背景颜色 private int marginWidth = 15; // 左右与边缘的距离 private int marginHeight = 20; // 上下与边缘的距离 private int mLineCount; // 每页可以显示的行数 private float mVisibleHeight; // 绘制内容的宽 private float mVisibleWidth; // 绘制内容的宽 private boolean m_isfirstPage,m_islastPage; // private int m_nLineSpaceing = 5; private Paint mPaint; //设置阅读界面,包括字体,显示多少行 public BookPageFactory(int w, int h) { // TODO Auto-generated constructor stub mWidth = w; mHeight = h;//获得宽和高 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.LEFT);//设置文本对齐方式 mPaint.setTextSize(m_fontSize);//设置字体大小 mPaint.setColor(m_textColor);//设置颜色 mVisibleWidth = mWidth - marginWidth * 2; mVisibleHeight = mHeight - marginHeight * 2;//绘制的内容宽和高 mLineCount = (int) (mVisibleHeight / m_fontSize); // 可显示的行数 } //获得文件,并映射到内存 public void openbook(String strFilePath) throws IOException { book_file = new File(strFilePath); long lLen = book_file.length();//文本长度 m_mbBufLen = (int) lLen;//缓存的长度 m_mbBuf = new RandomAccessFile(book_file, "r").getChannel().map( FileChannel.MapMode.READ_ONLY, 0, lLen); //RandomAccessFile是用来访问那些保存数据记录的文件的 } //读一段 protected byte[] readParagraphBack(int nFromPos) { int nEnd = nFromPos;//字符缓存开始的位置 int i; byte b0, b1; if (m_strCharsetName.equals("UTF-16LE")) { i = nEnd - 2;//? while (i > 0) { b0 = m_mbBuf.get(i); b1 = m_mbBuf.get(i + 1); if (b0 == 0x0a && b1 == 0x00 && i != nEnd - 2) { i += 2; break; } i--; } } else if (m_strCharsetName.equals("UTF-16BE")) { i = nEnd - 2; while (i > 0) { b0 = m_mbBuf.get(i);//返回指定索引 b1 = m_mbBuf.get(i + 1); if (b0 == 0x00 && b1 == 0x0a && i != nEnd - 2) { i += 2; break; }//过段时 i--; } } else { i = nEnd - 1;//? while (i > 0) { b0 = m_mbBuf.get(i); if (b0 == 0x0a && i != nEnd - 1) { i++; break; }//过段时 i--; } } if (i < 0) i = 0; //i是过段的索引位置 int nParaSize = nEnd - i; int j; byte[] buf = new byte[nParaSize]; for (j = 0; j < nParaSize; j++) { buf[j] = m_mbBuf.get(i + j); } return buf; } // 读取上一段落 protected byte[] readParagraphForward(int nFromPos) { int nStart = nFromPos;//字符缓存开始的位置 int i = nStart; byte b0, b1; // 根据编码格式判断换行 if (m_strCharsetName.equals("UTF-16LE")) { while (i < m_mbBufLen - 1) { b0 = m_mbBuf.get(i++); b1 = m_mbBuf.get(i++); if (b0 == 0x0a && b1 == 0x00) { break; } } } else if (m_strCharsetName.equals("UTF-16BE")) { while (i < m_mbBufLen - 1) { b0 = m_mbBuf.get(i++); b1 = m_mbBuf.get(i++); if (b0 == 0x00 && b1 == 0x0a) { break; } } } else { while (i < m_mbBufLen) { b0 = m_mbBuf.get(i++); if (b0 == 0x0a) { break; } } } //这使i在换行的索引位置 int nParaSize = i - nStart; byte[] buf = new byte[nParaSize]; for (i = 0; i < nParaSize; i++) { buf[i] = m_mbBuf.get(nFromPos + i); }//把读到的段输入字节流中 return buf; } protected Vector<String> pageDown() { String strParagraph = ""; Vector<String> lines = new Vector<String>(); while (lines.size() < mLineCount && m_mbBufEnd < m_mbBufLen) { //不能大于给定的最多行数 byte[] paraBuf = readParagraphForward(m_mbBufEnd); // 读取一个段落 m_mbBufEnd += paraBuf.length; //减去读到的长度,作为下一个结束的地步 try { strParagraph = new String(paraBuf, m_strCharsetName); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } String strReturn = ""; if (strParagraph.indexOf("\r\n") != -1) { //"\r\n"在字符串中则,下同 strReturn = "\r\n"; strParagraph = strParagraph.replaceAll("\r\n", ""); } else if (strParagraph.indexOf("\n") != -1) { strReturn = "\n"; strParagraph = strParagraph.replaceAll("\n", ""); } if (strParagraph.length() == 0) { lines.add(strParagraph); } while (strParagraph.length() > 0) { int nSize = mPaint.breakText(strParagraph, true, mVisibleWidth, null); //返回刚好要超过规定长度mVisibleWidth的值 lines.add(strParagraph.substring(0, nSize)); strParagraph = strParagraph.substring(nSize); if (lines.size() >= mLineCount) {//超过规定的行数 break; } } if (strParagraph.length() != 0) { try { m_mbBufEnd -= (strParagraph + strReturn) .getBytes(m_strCharsetName).length; //即返回字符串在GBK、UTF-8和ISO8859-1编码下的byte数组表示 //目的在于把m_mbBufEnd改成指向下一行 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return lines; } //设置文本显示 //预防文本超过界面规定的范围 protected void pageUp() { if (m_mbBufBegin < 0) m_mbBufBegin = 0; Vector<String> lines = new Vector<String>(); String strParagraph = ""; while (lines.size() < mLineCount && m_mbBufBegin > 0) { //不能大于给定的最多行数 Vector<String> paraLines = new Vector<String>(); byte[] paraBuf = readParagraphBack(m_mbBufBegin); //读到一段 //从头开始读 m_mbBufBegin -= paraBuf.length; //减去读到的长度,作为下一个开始要读的标志 try { strParagraph = new String(paraBuf, m_strCharsetName); //第一个参数读到的字符串,第二个参数是文本格式 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } strParagraph = strParagraph.replaceAll("\r\n", ""); //用第二个参数的字符串替换第一个 strParagraph = strParagraph.replaceAll("\n", ""); //替换掉任何过行的记录 if (strParagraph.length() == 0) {//为空,没有字符串时 paraLines.add(strParagraph); } while (strParagraph.length() > 0) { int nSize = mPaint.breakText(strParagraph, true, mVisibleWidth, null); //测量第一个字符串,与第三个参数即宽度相比 paraLines.add(strParagraph.substring(0, nSize)); //获得0到nSize的字符串 strParagraph = strParagraph.substring(nSize); //字符串变成从nSize开始 }//在于把字符串变成不会超过规定长度mVisibleWidth的字符串 lines.addAll(0, paraLines);//加入所有Vector字符串列 } while (lines.size() > mLineCount) {//超过规定行数时 try { m_mbBufBegin += lines.get(0).getBytes(m_strCharsetName).length; //.get()表示返回指定位置的元素 //String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组 //即返回字符串在GBK、UTF-8和ISO8859-1编码下的byte数组表示 //目的在于把m_mbBufBegin改成指向下一行 lines.remove(0); //删除指定位置的元素 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } m_mbBufEnd = m_mbBufBegin; return; } protected void prePage() throws IOException { if (m_mbBufBegin <= 0) { m_mbBufBegin = 0; m_isfirstPage=true; return; }else m_isfirstPage=false; m_lines.clear(); //删除所有元素 pageUp(); m_lines = pageDown(); //把收集到的文本放到m_lines中 } public void nextPage() throws IOException { if (m_mbBufEnd >= m_mbBufLen) { m_islastPage=true; return; }else m_islastPage=false; m_lines.clear(); m_mbBufBegin = m_mbBufEnd; m_lines = pageDown(); } public void onDraw(Canvas c) { if (m_lines.size() == 0) m_lines = pageDown(); //现在m_lines的格式是按照 //界面阅读规定的,即有多宽的,有多行 if (m_lines.size() > 0) { if (m_book_bg == null) c.drawColor(m_backColor);//设置背景颜色 else c.drawBitmap(m_book_bg, 0, 0, null); int y = marginHeight; for (String strLine : m_lines) { y += m_fontSize; c.drawText(strLine, marginWidth, y, mPaint); //给界面的每一行绘制 } } float fPercent = (float) (m_mbBufBegin * 1.0 / m_mbBufLen); DecimalFormat df = new DecimalFormat("#0.0");//用于格式化十进制数字 //即按照参数的格式输出 String strPercent = df.format(fPercent * 100) + "%"; int nPercentWidth = (int) mPaint.measureText("999.9%") + 1; //返回字符串的宽度 c.drawText(strPercent, mWidth - nPercentWidth, mHeight - 5, mPaint); } //绘制图像 public void setBgBitmap(Bitmap BG) { m_book_bg = BG; } //返回第一页 public boolean isfirstPage() { return m_isfirstPage; } //返回最后一页 public boolean islastPage() { return m_islastPage; } }

立即下载
51单片机课程设计及报告

本论文包括所有的论文要求,设计要求,步骤,硬件的详细设计(包括每个细节的讲解),软件设计(包括流程图),总结与体会,设计总原理图与总代码 设计要求: 电子钟 显示时、分、秒。 具有定时报警功能;每天可设置4个报警时间(时、分)。 能借助键盘,设置时钟及报警时间。 报警时,蜂鸣器鸣响1秒,然后停止。 停电后所有设定的数据不丢失。 重新开机可以重新设定时钟。

立即下载
JAVA文件阅读器代码

实现功能:基本功能如字体大小和颜色的转换+自动翻页(利用定时)+设置背景

立即下载
华北理工大学电子信息工程单片机课设

该报告为华北理工大学电子信息工程专业的单片机课设报告

立即下载
自选课题-交通灯控制器fpga

EDA/FPGA大实验报告,包括程序结果及实验报告,很赞的

立即下载
c++ 课程设计报告(多个题目合集) 完整 代码 + 报告

c++ 课程设计报告 多个合集 完整 代码 + 报告

立即下载
数据结构与算法分析课程报告

数据结构与算法分析的课程设计报告 课题名称: 带括号的算术表达式求值

立即下载
成绩管理系统(数据结构课程设计

数据结构课程设计,成绩管理系统课题代码,绝对原创。

立即下载
关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

数据结构课程设计自选课题之文本阅读器

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可返还被扣除的积分

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: