想要系统学习java到底要学习哪些知识

想要系统学习java到底要学习哪些知识,第1张

一、java基础

学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程、并发、异常及网络编程,这些我们称之为JavaSE基础。当你掌握了这些内容之后,你就可以做出诸如:电脑上安装的迅雷下载软件、QQ聊天客户端、考勤管理系统等桌面端软件。

JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。

在Java基础板块中有6个子模块的学习:

基础语法,可帮助你建立基本的编程逻辑思维;

面向对象,以对象方式去编写优美的Java程序;

集合,后期开发中存储数据必备技术

IO,对磁盘文件进行读取和写入基础 *** 作;

多线程与并发,提高程序效率;

异常,编写代码逻辑更加健全;

网络编程,应用服务器学习基础,完成数据的远程传输。

学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。

技术树

二、数据库

互联网最具价值的是数据,任何编程语言都需要解决数据存储问题,而数据存储的关键技术是数据库。MySQL和Oracle都是广受企业欢迎的数据库管理系统。Java程序和数据库通信的最常见技术是JDBC,Druid和C3P0。学习这些数据库技术后,可以掌握数据库运维技术、复杂业务表结构设计规范、工作中常见的SQL *** 作、软件数据存储等。

数据库不仅仅是Java开发工程师的必学课程,也是其他语言都需要掌握的技能。用于对交互过程中客户的数据进行存储。

该板块包括关系型数据库和非关系型数据库。

例如:MySQL、oracle、redis、MongoDB等。数据库学习完毕后,可以将数据存储到数据库中,也可以通过SQL语句从数据库中查询数据,结合Java项目可以实现动态站点的数据的保存。

技术树

三、前端技术

浏览器展示给用户看到的网页就是前端,前端有三大基础技术分别为Html、CSS、JavaScript,这些学完后,为了做出更好、更炫的交互式体验效果,我们还需要学习jQuery、ElementUI、Vue、Ajax,以及打包工具webpack。学完这些技术后,我们可以开发微信小程序、响应式网站、移动端网站、开发类似京东一样的B2B2C商城、管理后台等。

Javaweb阶段包括前端、数据库和动态网页。Javaweb是互联网项目的入门课程,是学习后面高进阶课程的基础。

首先,我们先看一下前端板块。该板块主要包括如下几个模块:

HTML5,网页制作标记语言;

CSS,对HTML制作网页进行美化;

JavaScript,嵌入在页面中的脚本语言,具备逻辑性;

Vue,前端框架,简化了与服务器端交互的 *** 作,用户良好的交互体验是必不可少的。

学习前端技术后,可以完成类似京东、淘宝的前端工程的编写。

技术树

四、动态网页

掌握前端技术只能做静态网站,但它页面数据一成不变,而动态网站可以根据数据库中变更的数据实现不同的内容展示,应用更广泛,因此程序员必须要学会做动态网站。使用Java做动态网站,我们需要学习Servlet、Filter、Session、Cookie、JSP、EL表达式、JSTL等做动态网站的完整知识体系,学完可研发出OA系统、内容网站、BBS等。

动态网页是中级程序员服务器端编程的基础,是高级框架学习的必备课程,后期学习的框架、服务底层都是基于动态网页技术之上的。

该板块包括Javaweb核心技术、包括Servlet、Request、Response、Cookie和Session等,通过这些技术的学习可以完成动态站点开发,可更好的完成服务器端与客户的交互,让页面的数据“动”起来,做出小型的应用系统。

技术树

五、编程强化

前面学了JavaSE基础,但它在企业级应用中程序处理业务的效率并不高、扩展差,编程强化是对JavaSE基础的加强,将针对性的提高程序处理业务的执行效率、增强程序扩展性。编程强化将加强多线程高级学习,涉及线程内存、线程通信等技术。学完以后,能增加一个中级程序员的知识储备,无论在面试过程中还是将来技术的深入打一个良好的基础。

编程强化是对解决实际问题方面做一个深入的了解和应用,是对JavaSE基础的加强,对后期自动以框架和对一些服务框架的底层理解做支撑。

编程强化板块主要包括如下几个模块:多线程高级、涉及线程内存、线程通信等;JVM优化,对JVM底层进行调优来提高项目执行效率;NIO,同步非阻塞IO来提高效率。

学习该阶段,可以对原有项目进行优化从而使程序更快更稳定。

技术树

六、软件项目管理

公司开发都是团队协同开发,为更好的掌握实际开发,我们还需要学习常用的项目管理平台、版本控制器、项目构建工具以及自动化部署工具。项目开发一定是有版本升级的,管理好项目进度和版本需要Git、Maven、Sonar这样的系统平台。学习完软件项目管理后,将掌握整个项目实际开发过程以及整个项目开发过程中所使用协同开发工具。

JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。

在Java基础板块中有6个子模块的学习:基础语法,可帮助你建立基本的编程逻辑思维;面向对象,以对象方式去编写优美的Java程序;集合,后期开发中存储数据必备技术;IO,对磁盘文件进行读取和写入基础 *** 作;多线程与并发,提高程序效率;异常,编写代码逻辑更加健全;网络编程,应用服务器学习基础,完成数据的远程传输。

学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。

技术树

七、热门技术框架

Javaweb掌握后,已经具备企业中实际项目的开发能力了,但它开发效率低,代码量大,开发周期长、开发成本高。企业中广泛使用一些优秀的框架技术来解决上述问题,因此我们还需要学习框架技术,项目开发中主流的Java框架技术有SpringMVC、Spring、MyBatis、MyBatis Plus、SpringData等。这些框架技术都是一个优秀程序员所必备的技能。

使用Javaweb进行企业级开发是完全可以的,但是开发效率比较低,所以对常用的逻辑 *** 作进行封装就形成了框架,因此框架是企业开发的入门技能。

热门框架板块主流框架有如下几个:Spring框架,占据统治地位,其生态系统涉及各个方面解决方案;MyBatis框架,使用ORM思想对数据库进行 *** 作。

该板块学习后,就可以进行真实企业级项目开发了,做出的项目也会更加符合企业要求。

技术树

八、分布式架构

需要用到分布式微服务的技术。学习完该阶段课程,可以具备大型SOA架构和微服务架构能力,能掌握大型微服务项目必备技术和实际经验。企业发展过程中,业务量和用户量逐渐增加,为了保证系统的可用性,系统越做越复杂,研发人员增多,大家很难共同维护一个复杂的系统,往往修改部分内容,导致牵一发而动全身,所以我们需要升级系统架构,

随着互联网的发展,业务的复杂性和用户的体验性都需要提高,所以分布式架构出现了。该板块主要讲解的是分布式架构的相关解决方案。

主要包括如下模块:Dubbo,高性能的 RPC 服务发布和调用框架;SpringBoot,简化Spring应用的初始搭建以及开发过程;Spring Cloud,一系列框架的有序集合,如服务发现注册、配置中心、负载均衡、断路器、数据监控等。

该板块的学习,可以具备大型互联网项目开发的必备技术和实际经验,为进入BATJ打下基础

技术树

九、服务器中间件

在分布式系统架构中,服务与服务之间的异步通信,是非常常见的需求之一,消息中间件的诞生正是为了解决这类问题。目前市面上的主流消息中间件有RabbitMQ、RocketMQ、Kafka,我们将学习这3个消息中间件,实现分布式项目中的异步通信。学习完这些后,可以实现分布式项目的异步通信、分布式应用日志收集、分布式事务等。

中间件板块是大型互联网项目中必备的。服务中间件可以帮助各子模块间实现互相访问,消息共享或统一访问等功能。其包括远程服务框架中间件,例如阿里(Apache)的RPC框架Dubbo等;消息队列中间件,例如:阿里巴巴开源分布式中间件RocketMQ、高吞吐量消息发布和流处理服务Kafka等。

学习服务中间件是中级JavaEE工程师必要技术,也是JavaEE架构师必须精通的技术。

技术树

十、服务器技术

程序开发完成后,我们把它们打包部署到服务器中运行,所以我们需要学习常见的服务器技术,常见的服务器有Linux和Window server,Linux性能高,是当前主流。我们写好的项目需要用一个软件运行起来,这个软件叫web容器,我们需要在服务器上安装web容器来发布项目,当前主流的web容器有tomcat、jetty、nginx、undertow。

不管是使用原生Javaweb进行开发,还是使用框架进行开发,项目最终需要对外发布才能供全世界的人访问到,而服务器板块就可以解决这个问题,所以服务器是项目发布的必要技术。该板块包括虚拟化和web应用服务器的学习,主要包括如下几个模块:Vmware,虚拟机软件;Linux,专门用于服务器的系统;Nginx,集群部署时反向代理服务器;Tomcat,项目发布时主要使用的服务器。

该板块学习后,我们就可以把开发好的项目发布到服务器中,然后供你的小伙伴远程访问了,超酷!

技术树

十一、容器技术

具备了服务器 *** 作系统及web容器,我们就可以部署单机的站点,在分布式系统中,几十上百的服务,如果使用单机这种部署方式,会投入很高的人力,同时出错的几率也大。所以服务器虚拟化技术Docker也称为如今的必备技术了,Docker可以帮助运维人员实行快速部署,批量维护使用Kubernetes实现自动化部署、大规模可伸缩、应用容器管理。

容器化技术是近两年超级火的一个专题,通过容器化技术可以对环境进行打包,方便移植,大大提高了开发效率。该板块包括容器化技术Docker和其平台管理引擎Kubernetes,其中,Docker 是一个开源的应用容器引擎,可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。而Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效。通过该板块的学习,你可以通过上述技术快速搭建环境,节省开发时间,提高开发效率。

技术树

十二、业务解决方案

企业开发中会遇到一些通用的业务场景,诸如:搜索引擎、缓存、定时任务、工作流、报表导出、日志管理、系统监控等,那么这些通用的解决方案也有现成优秀的免费开源中间件,可供使用。诸如:ElasticSearch、Lucene、Solr、redis、MongoDB、slf4J、ECharts、Quartz、POI等。业务解决方案课程的业务方案和技术难点,解决了企业开发中90%以上的痛点和难点。

虽然我们已经具备了基础技术和高阶技术,但是要想与企业开发相接轨,还需要对实际项目的业务解决方案进行探究。而此版块就是在实际业务场景中的真实解决方案集合,常用的业务解决方案有如下:搜索业务场景解决方案、日志收集与分析场景解决方案、工作流引擎场景解决方案、任务调度场景解决方案、地图开发平台场景解决方案、支付开放平台场景解决方案、图表可视化场景解决方案。通过分析实际业务来学习这个解决方案技术集,完全可以达到中级甚至高级工程师水平。

技术树

java学习路线大陆传送门

public static void main(String args[]) throws BiffException, IOException, WriteException{

//1 从Excel文件读取数据表

//Java Excel API既可以从本地文件系统的一个文件(xls),也可以从输入流中读取Excel数据表。

//读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何 *** 作:

//(完整代码见ExcelReadingjava)

try

{

//构建Workbook对象, 只读Workbook对象

//直接从本地文件创建Workbook

//从输入流创建Workbook

InputStream is = new FileInputStream("D:/userxls");

jxlWorkbook rwb = WorkbookgetWorkbook(is);

//一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:

//获取第一张Sheet表

Sheet rs = (Sheet) rwbgetSheet(0);

//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,

//要注意的一点是下标从0开始,就像数组一样。

//一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:

//获取第一行,第一列的值

Cell c00 = ((jxlSheet) rs)getCell(0, 0);

String strc00 = c00getContents();

//获取第一行,第二列的值

Cell c10 = ((jxlSheet) rs)getCell(1, 0);

String strc10 = c10getContents();

//获取第二行,第二列的值

Cell c11 = ((jxlSheet) rs)getCell(1, 1);

String strc11 = c11getContents();

Systemoutprintln("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00getType());

Systemoutprintln("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10getType());

Systemoutprintln("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11getType());

//如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,

//它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,

//Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

//如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:

String strcc00 = null;

double strcc10 = 000;

Date strcc11 = null;

Cell cc00 = ((jxlSheet) rs)getCell(0, 0);

Cell cc10 = ((jxlSheet) rs)getCell(1, 0);

Cell cc11 = ((jxlSheet) rs)getCell(1, 1);

if(c00getType() == CellTypeLABEL)

{

LabelCell labelc00 = (LabelCell)cc00;

strcc00 = labelc00getString();

}

if(c10getType() == CellTypeNUMBER)

{

NumberCell numc10 = (NumberCell)cc10;

strcc10 = numc10getValue();

}

if(c11getType() == CellTypeDATE)

{

DateCell datec11 = (DateCell)cc11;

strcc11 = datec11getDate();

}

Systemoutprintln("Cell(0, 0)" + " value : " + strcc00 + "; type : " + cc00getType());

Systemoutprintln("Cell(1, 0)" + " value : " + strcc10 + "; type : " + cc10getType());

Systemoutprintln("Cell(1, 1)" + " value : " + strcc11 + "; type : " + cc11getType());

//在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,

//强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。

//API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:

//每种类型的具体意义,请参见Java Excel API Document。

//当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,

//以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

// *** 作完成时,关闭对象,释放占用的内存空间

rwbclose();

}

catch (Exception e)

{

eprintStackTrace();

}

//Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,

//其它的方法请参考附录中的Java Excel API Document。

//Workbook类提供的方法

//1 int getNumberOfSheets();

//获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File("D:/userxls"));

int sheets = rwbgetNumberOfSheets();

//2 Sheet[] getSheets();

//返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxlWorkbook rwb2 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

Sheet[] sheets2 = (Sheet[]) rwb2getSheets();

//3 String getVersion();

//返回正在使用的API的版本号,好像是没什么太大的作用。

jxlWorkbook rwb3 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

String apiVersion = rwb3getVersion();

//Sheet接口提供的方法

//1) String getName();

//获取Sheet的名称,示例:

jxlWorkbook rwb4 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs = rwb4getSheet(0);

String sheetName = rsgetName();

//2) int getColumns()

//获取Sheet表中所包含的总列数,示例:

jxlWorkbook rwb5 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs2 = rwb5getSheet(0);

int rsColumns = rs2getColumns();

//3) Cell[] getColumn(int column)

//获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxlWorkbook rwb6 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs3 = rwb6getSheet(0);

Cell[] cell = rs3getColumn(0);

//4) int getRows()

//获取Sheet表中所包含的总行数,示例:

jxlWorkbook rwb7 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs4 = rwb7getSheet(0);

int rsRows = rs4getRows();

//5) Cell[] getRow(int row)

//获取某一行的所有单元格,返回的是单元格对象数组,示例子:

jxlWorkbook rwb8 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs5 = rwb8getSheet(0);

Cell[] cell5 = rs5getRow(0);

//6) Cell getCell(int column, int row)

//获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,

//这与通常的行、列组合有些不同。

jxlWorkbook rwb9 = jxlWorkbookgetWorkbook(new File("D:/userxls"));

jxlSheet rs6 = rwb9getSheet(0);

Cell cell6 = rs6getCell(0, 0);

这个连接是与数据库服务器的一个连接,虽然你的方法结束了,但是这个资源依然存在,就像是你打开一个文件输入流,在一个方法内定义的,方法结束完了 如果你不关闭这个输入流,它依然存在是一个道理,这个具体也不好说清楚希望你能明白,还有语句和结果集对象,他们意思是一样的

第一个类:

package totabelaction;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaxswingJOptionPane;

import topdfTableToPdf;

import totabelviewTabelData;

import totabelxlsExcelDemo;

public class TableAction implements ActionListener {

TabelData data;

public TableAction(TabelData data) {

thisdata = data;

}

public void actionPerformed(ActionEvent e) {

String str = egetActionCommand();

if ("添加"equals(str)) {

dataaddData();

} else if ("导出到Excel"equals(str)) {

ExcelDemo demo = new ExcelDemo();

demomethod(data);

} else if ("删除"equals(str)) {

if (datagetRow() != -1) {

datadelRow();

} else {

JOptionPaneshowMessageDialog(null, "请选择要删除的行!");

}

}else if("从Excel导入"equals(str)){

datagetXlsInfo();

}else if("从Excel导入到数据库"equals(str)){

datatoDb();

}else if("从table导出到pdf"equals(str)){

TableToPdf pdf=new TableToPdf();

pdfnewPage(data);

}else if("计算学分"equals(str)){

datagetXlsInfoToCredit();

}

}

}

第二个类:数据库连接

package totabeldb;

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlSQLException;

import javasqlStatement;

public class JdbcConnection {

private static JdbcConnection con;

public static JdbcConnection getCon() {

if (con == null) {

con = new JdbcConnection();

}

return con;

}

public Connection getConnection() {

Connection connection=null;

try {

ClassforName("oraclejdbcOracleDriver");

String url = "jdbc:oracle:thin:@127001:1521:oracle";

String user = "scott";

String password = "tiger";

connection = DriverManagergetConnection(url, user,

password);

} catch (ClassNotFoundException e) {

eprintStackTrace();

} catch (SQLException e) {

eprintStackTrace();

}

return connection;

}

// public static void main(String[] args) {

// JdbcConnection connection=new JdbcConnection();

// connectiongetConnection("asd", "99");

// }

}

第三个类:主类(入口)

package totabeldb;

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlSQLException;

import javasqlStatement;

public class JdbcConnection {

private static JdbcConnection con;

public static JdbcConnection getCon() {

if (con == null) {

con = new JdbcConnection();

}

return con;

}

public Connection getConnection() {

Connection connection=null;

try {

ClassforName("oraclejdbcOracleDriver");

String url = "jdbc:oracle:thin:@127001:1521:oracle";

String user = "scott";

String password = "tiger";

connection = DriverManagergetConnection(url, user,

password);

} catch (ClassNotFoundException e) {

eprintStackTrace();

} catch (SQLException e) {

eprintStackTrace();

}

return connection;

}

// public static void main(String[] args) {

// JdbcConnection connection=new JdbcConnection();

// connectiongetConnection("asd", "99");

// }

}

第四个类:

package totabelxls;

import javaioFile;

import javaioIOException;

import javautilVector;

import javautilregexMatcher;

import javautilregexPattern;

import javaxswingJOptionPane;

import totabelviewTabelData;

import jxlCell;

import jxlSheet;

import jxlWorkbook;

import jxlreadbiffBiffException;

import jxlwriteLabel;

import jxlwriteWritableSheet;

import jxlwriteWritableWorkbook;

import jxlwriteWriteException;

import jxlwritebiffRowsExceededException;

public class ExcelDemo {

/

@param args

/

private Vector title = new Vector();

private Vector[] array;

// public static void main(String[] args) {

// ExcelDemo demo = new ExcelDemo();

// demogetXlsInfo();

//

// }

public void method(TabelData table) {

int row = tablegetRowSize();

int column = tablegetColumnSize();

WritableWorkbook book = null;

Vector title = tablesetTitle();

Object[] str = titletoArray();

try {

book = WorkbookcreateWorkbook(new File("testxls"));

WritableSheet sheet = bookcreateSheet("成绩表", 0);

for (int i = 0; i < strlength; i++) {

sheetaddCell(new Label(i, 0, (String) str[i]));

}

for (int i = 1; i < row + 1; i++) {

for (int j = 1; j < column + 1; j++) {

sheetaddCell(new Label(j - 1, i, tablegetTableInfo(i - 1,

j - 1)));

}

}

bookwrite();

JOptionPaneshowMessageDialog(null, "导出完成!");

} catch (IOException e) {

eprintStackTrace();

} catch (RowsExceededException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

} finally {

try {

bookclose();

} catch (WriteException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

}

/

输出Excel的数据到表单

@return

/

public Vector getXlsInfo() {

Vector v = new Vector();

jxlWorkbook rwb = null;

int index = 0;

try {

rwb = jxlWorkbookgetWorkbook(new File("testxls"));

Sheet[] sheet = rwbgetSheets();

for (int i = 0; i < sheetlength; i++) {

int rs = sheet[i]getRows();

array = new Vector[rs - 1];

for (int j = 1; j < rs; j++) {

Cell[] cell = sheet[i]getRow(j);

Vector info = new Vector();

for (int k = 0; k < celllength; k++) {

infoadd(cell[k]getContents());

}

array[index] = info;

index++;

vadd(info);

}

Cell[] titleCell = sheet[i]getRow(0);

for (int j = 0; j < titleCelllength; j++) {

titleadd(titleCell[j]getContents());

}

}

} catch (BiffException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

} finally {

rwbclose();

}

return v;

}

public Vector getXlsInfoToCredit() {

Vector v = new Vector();

jxlWorkbook rwb = null;

try {

rwb = jxlWorkbookgetWorkbook(new File("d:/test/信科0821(南迁)xls"));

Sheet[] sheet = rwbgetSheets();

for (int i = 0; i < sheetlength; i++) {

int rs = sheet[i]getRows();

array = new Vector[rs - 1];

for (int j = 1; j < rs; j++) {

Cell[] cell = sheet[i]getRow(j);

Vector info = new Vector();

for (int k = 0; k < celllength; k++) {

// if(){

Pattern p = Patterncompile("[0-9]{1,}");

Matcher m = pmatcher(cell[k]getContents());

if (mmatches()) {

int score = IntegervalueOf(cell[k]getContents());

float result = getScore(score);

infoadd(result);

} else {

infoadd(cell[k]getContents());

}

}

vadd(info);

}

Cell[] titleCell = sheet[i]getRow(0);

for (int j = 0; j < titleCelllength; j++) {

titleadd(titleCell[j]getContents());

}

}

} catch (BiffException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

} finally {

rwbclose();

}

return v;

}

public float getScore(int n) {

float score = n;

if (n < 60) {

score = 0;

return score;

} else {

if (n >= 60 && n <= 63) {

score = (float) 10;

} else if (n >= 64 && n <= 67) {

score = (float) 13;

} else if (n >= 68 && n <= 71) {

score = (float) 17;

} else if (n >= 72 && n <= 75) {

score = (float) 20;

} else if (n >= 76 && n <= 79) {

score = (float) 23;

} else if (n >= 80 && n <= 83) {

score = (float) 27;

} else if (n >= 84 && n <= 87) {

score = (float) 30;

} else if (n >= 88 && n <= 91) {

score = (float) 33;

} else if (n >= 92 && n <= 95) {

score = (float) 37;

} else if (n >= 96 && n <= 100) {

score = (float) 40;

}

return score;

}

}

public Vector getTitle() {

// getXlsInfo();

return title;

}

public Vector[] getArray() {

getXlsInfo();

return array;

}

}

因为时间问题就没有再写了,上面是我以前做的,不懂就q我

读取文件指定行要用到类LineNumberReader,它是跟踪行号的缓冲字符输入流,其基类是BufferedReader。。它有两个构造方法:

public LineNumberReader(Reader in)

使用默认输入缓冲区的大小创建新的行编号 reader,默认输入缓冲区的大小为8096个字节。

pulbic LineNumberReader(Reader in,int size)

创建新的行编号 reader,将字符读入给定大小的缓冲区。

import javaioFile;

import javaioFileReader;

import javaioIOException;

import javaioLineNumberReader;

public class ReadSelectedLine{

/

读取文件指定行。

/

public static void main(String[] args) throws IOException {

// 指定读取的行号

int lineNumber = 12;

// 读取文件

File sourceFile = new

File("src/Chapter08/ReadSelectedLinejava");

// 读取指定的行

readAppointedLineNumber(sourceFile, lineNumber);

// 获取文件的内容的总行数

Systemoutprintln(getTotalLines(sourceFile));

}

// 读取文件指定行。

static void readAppointedLineNumber(File sourceFile, int lineNumber)

throws IOException {

FileReader in = new FileReader(sourceFile);

LineNumberReader reader = new LineNumberReader(in);

String s = readerreadLine();

if (lineNumber < 0 || lineNumber > getTotalLines(sourceFile)) {

Systemoutprintln("不在文件的行数范围之内。");

}

{

while (s != null) {

Systemoutprintln("当前行号为:"

+ readergetLineNumber());

readersetLineNumber(20);

Systemoutprintln("更改后行号为:"

+ readergetLineNumber());

Systemoutprintln(s);

Systemexit(0);

s = readerreadLine();

}

}

readerclose();

inclose();

}

// 文件内容的总行数。

static int getTotalLines(File file) throws IOException {

FileReader in = new FileReader(file);

LineNumberReader reader = new LineNumberReader(in);

String s = readerreadLine();

int lines = 0;

while (s != null) {

lines++;

s = readerreadLine();

}

readerclose();

inclose();

return lines;

}

}

以上就是关于想要系统学习java到底要学习哪些知识全部的内容,包括:想要系统学习java到底要学习哪些知识、如何用java导入Excel数据到数据库、求助关于java的jdbc中关于为什么要关闭Connection、Statement和ResulSet等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9776324.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存