一个网页打印文件的类(半成品)

本文介绍了一个用于简化JSP页面复杂度的文件信息打印类的实现细节,包括类的功能、遇到的问题及解决思路。作者通过实践提高了对IO、JSP、集合等方面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前天在公司写了个比较简单的页面打印文件信息的类,减少了JSP页面的复杂的。可惜不能带回家,今天回家就想做个更好的,可惜啊,花了太多时间去整了,最后的总结还是——这个类被使用的可能性还是不多的,而且还有点问题,传个JSP隐式对象out过去调用他的println不知道怎么第一行老是有大堆空格,目前还没有看那个编译之后的*_JSP.java类里面怎么打印的。暂时寄放在此。这个类还是可以使用的,只是暂时不知道应该提供哪些功能给它。其实还是学到不少新的知识。关于IO,jsp,集合,数组方面都有更多的了解。希望大家提出宝贵意见,要是您是初学者的话,有什么疑问我也很乐意解答和讨论。

    更好的做法,以后可以使用tag标签调用就好了。

 

 

package sc.sphenic.jsp.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.servlet.jsp.JspWriter;


public class FileJSPWriter {
 private final int ARRAY_GRANT = 10;

 // public static void main(String args[]) {
 // String fileName = "c:/text.txt";
 // try {
 // FileJSPWriter.writeln(new JSPWriter(100, true), fileName);
 // FileJSPWriter out = new FileJSPWriter(new JSPWriter(100, true),
 // fileName);
 //
 // while (out.writeLine() != null) {
 // System.out.println();
 // System.out.println(out.getCurRow());
 // }
 // String[] lines = out.getLines();
 // for (int i = 0; i < lines.length; i++) {
 // System.out.println(lines[i]);
 // }
 // } catch (FileNotFoundException e) {
 // // TODO Auto-generated catch block
 // e.printStackTrace();
 // } catch (PageIOException e) {
 // // TODO Auto-generated catch block
 // e.printStackTrace();
 //  }
 // }

 private String[] lines = new String[ARRAY_GRANT];

 
 private int maxRow;

 
 private JspWriter out;

 
 private BufferedReader in;

 
 private String curLine;

 
 private int curRow;

 private int nxtRow;

 public FileJSPWriter(JspWriter out, File f) throws FileNotFoundException {
  setIn(f);
  setOut(out);
  // TODO Auto-generated constructor stub
 }

 void setOut(JspWriter out) {
  this.out = out;

 }

 boolean absolute(int row) throws PageIOException, PageFileException {
  try {
   String temp = lines[row - 1];
   if (temp != null) {
    curLine = temp;
    curRow = row + 1;
    nxtRow = curRow + 1;
    return true;
   } else {
    throw new ArrayIndexOutOfBoundsException();
   }

  } catch (java.lang.ArrayIndexOutOfBoundsException e) {
   // try to find in file
   while (readLine()) {
    if (!EOF()) {
     if (row == maxRow) {// line found
      return true;
     }

    } else {
     throw new PageFileException("Can not found the line in:"
       + row + "\n The max lines is :" + maxRow);
    }
   }
   return false;
  }

 }

 public boolean EOF() {
  return curLine == null;
 }

 
 public FileJSPWriter(JspWriter out, String filePath)
   throws FileNotFoundException {
  this(out, new File(filePath));
 }

 
 public static void writeln(JspWriter out, File f)
   throws FileNotFoundException, PageIOException {
  FileJSPWriter fOut = new FileJSPWriter(out, f);
  while (fOut.writeLine() != null) {
   // do nothing
  }
 }

 
 public static void writeln(JspWriter out, String filePath)
   throws FileNotFoundException, PageIOException {
  writeln(out, new File(filePath));
 }

 
 public String writeLine() throws PageIOException {
  if (getLine()) {
   try {
    out.println(curLine);
   } catch (IOException e) {
    throw new PageIOException(e);
   }
  }
  return curLine;
 }

 public boolean writeLine(File f, boolean bReplace) throws PageIOException,
   FileNotFoundException {
  checkReader(f, bReplace);
  return writeLine() != null;
 }

 private void checkReader(File f, boolean replace)
   throws FileNotFoundException {
  if (replace) {
   setIn(f);
  }
  if (in != null) {

  }
 }

 
 void setIn(File f) throws FileNotFoundException {
  in = new BufferedReader(new FileReader(f));
 }

 
 private boolean getLine() throws PageIOException {
  try {
   return absolute(curRow + 1);
  } catch (PageFileException e) {// EOF
   return false;
  }

 }

 private boolean readLine() throws PageIOException {
  // 文件到达最后readLine将返回null
  try {
   if ((curLine = in.readLine()) == null) {
    return false;
   } else {
    updateRow();
    return true;
   }
  } catch (IOException e) {
   try {
    in.close();
   } catch (IOException e1) {
    throw new PageIOException("Close reader error");
   }
   throw new PageIOException(e);
  }

 }

 public boolean getLine(int absoluteRow) throws PageIOException,
   PageFileException {

  if (absoluteRow < curRow) {
   absolute(absoluteRow);
   return true;
  } else {
   return readLine();
  }

 }

 private void updateRow() {
  if (lines.length == maxRow) {// out of index

   // extends the array
   extendLines();
  }
  lines[maxRow] = curLine;
  curRow++;
  maxRow++;
 }

 private void extendLines() {
  String[] src = lines;
  lines = new String[src.length + ARRAY_GRANT];
  System.arraycopy(src, 0, lines, 0, src.length);
 }

 void resetAllRow() {
  maxRow = 0;
  curRow = 0;
  nxtRow = curRow + 1;
 }

 public int getCurRow() {
  return curRow;
 }

 public String[] getLines() {
  return lines;
 }

}

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟V-SpHeNIC

支持科研技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值