Introduction to Java Programming编程题9.18<IO流处理>

本文介绍了一个Java程序,该程序从名为Score.txt的文件中读取数据,并计算所有分数的总和与平均值。使用了Scanner类来逐项读取文件中的双精度浮点数,然后通过循环累加求得总和并计算平均值。
/*
File Score.txt number of the sum and average are:
sum = 448.9
Average = 44.9
*/
/**Score.txt:
-------------------------------------------------
33.5 88 72 25 11.3
32.11 56 76 43 12
*/
import java.util.Scanner;

public class TheFileScore {
  public static void main(String[] args) throws Exception {
    java.io.File file = new java.io.File("Score.txt");
    Scanner input = new Scanner(file);

    double sumNumber = 0;
    int count = 0;
    while (input.hasNext()) {
      sumNumber += input.nextDouble();
      count++;
    }
    double average = sumNumber / count;

    System.out.println("File Score.txt number of the sum and average are: ");
    System.out.printf("sum = %.1f\n", sumNumber);
    System.out.printf("Average = %.1f\n", average);
  }
}
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>verify</artifactId> <groupId>grp.verify</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>atrade-server</artifactId> <modelVersion>4.0.0</modelVersion> <!-- 属性 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.2.5.RELEASE</spring-boot.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> <poi.version>4.1.2</poi.version> <swagger2.version>2.7.0</swagger2.version> <!-- 平台版本 --> <grp.pt.version>3.1.0-SNAPSHOT</grp.pt.version> <!--平台工作流版本--> <grp.pt.workflow.version>3.1.0-SNAPSHOT</grp.pt.workflow.version> <axis.version>1.4</axis.version> <commons-discovery.version>0.4</commons-discovery.version> <autopoi-web.version>1.3.6</autopoi-web.version> </properties> <!--依赖 管理,需先依赖 在引入--> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!--依赖 --> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <!-- 强制使用2.11.0,必须≥2.7 --> <version>2.11.0</version> <!-- 排除所有可能的低版本冲突 --> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-core</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--阿里巴巴导入中引入了poi看后续是否删除重复依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel-core</artifactId> <version>3.1.1</version> <scope>compile</scope> </dependency> <!-- aspose --> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose-words</artifactId> <!--<version>15.8.0</version>--> <version>19.9</version> <classifier>jdk16</classifier> </dependency> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose-cells</artifactId> <!--<version>8.5.2</version>--> <version>16.10.0</version> </dependency> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose.slides</artifactId> <version>15.9.0</version> </dependency> <!-- aspose --> <!--AOP--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> <!--其他--> <!-- <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>--> <dependency> <groupId>net.rakugakibox.spring.boot</groupId> <artifactId>orika-spring-boot-starter</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>3.3.5</version> <exclusions> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc</artifactId> <version>11.8.1</version> </dependency> <dependency> <groupId>grp.verify</groupId> <artifactId>verify-server-com</artifactId> <version>1.0.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <!-- Apache PDFBox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.30</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.30</version> </dependency> <dependency> <groupId>org.ofdrw</groupId> <artifactId>ofdrw-converter</artifactId> <version>2.3.7</version> <exclusions> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>layout</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>io</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> </exclusion> <exclusion> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> <exclusion> <groupId>org.ofdrw</groupId> <artifactId>ofdrw-pkg</artifactId> </exclusion> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.ofdrw</groupId> <artifactId>ofdrw-reader</artifactId> <version>2.3.7</version> <exclusions> <exclusion> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>layout</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> </exclusion> <exclusion> <groupId>com.itextpdf</groupId> <artifactId>io</artifactId> </exclusion> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId> <version>7.2.6</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>layout</artifactId> <version>7.2.6</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>io</artifactId> <version>7.2.6</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> <version>7.2.6</version> </dependency> <dependency> <groupId>org.jeecgframework</groupId> <artifactId>autopoi-web</artifactId> <version>${autopoi-web.version}</version> <exclusions> <exclusion> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </exclusion> <exclusion> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> </exclusion> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.jeecgframework</groupId> <artifactId>autopoi</artifactId> <version>1.3.6</version> <exclusions> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency> <!-- <dependency>--> <!-- <groupId>org.apache.poi</groupId>--> <!-- <artifactId>poi-ooxml</artifactId>--> <!-- <version>5.2.3</version>--> <!-- <scope>compile</scope>--> <!-- </dependency>--> <!-- 图片处理依赖 --> <dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.18.0</version> </dependency> </dependencies> <!--配置私服 --> <repositories> <repository> <id>releases</id> <name>nexus</name> <url>http://nexus.ctjsoft.com:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url> </repository> </repositories> <!--下载插件 --> <pluginRepositories> <pluginRepository> <id>releases</id> <name>nexus</name> <url>http://nexus.ctjsoft.com:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <!-- 构建 --> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.html</include> <include>**/*.page</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <!--JAR包打包需要将resources\lib\下的jar包复制到WEB-INF/lib--> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> <!-- <goal>build-info</goal> --> </goals> </execution> </executions> </plugin> <!-- 新增的--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <!-- 防止二进制文件被编译 ,解决resources下面文件编译后读取问题--> <nonFilteredFileExtensions> <nonFilteredFileExtension>jasper</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> <!-- 忽略WAR无web.xml警告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <!--<manifestEntries> <Timestamp>${maven.build.timestamp}</Timestamp> </manifestEntries>--> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
最新发布
11-04
<think>我们面对的问题是:本地启动正常,但服务器上启动出现`java.lang.NoClassDefFoundError: org/apache/commons/io/function/IOIterator`错误。根据错误信息,缺少的是Apache Commons IO库中的一个类`IOIterator`。 分析: 1. `NoClassDefFoundError`意味着在编译时该类存在,但在运行时找不到。这通常是由于依赖项在运行时未被正确引入造成的。 2. 本地启动正常,说明本地环境中这个类是存在的(可能是直接或间接依赖了正确的版本)。但在服务器上启动时找不到,说明服务器环境中缺少这个类。 可能的原因: 1. 服务器打包的jar/war中没有包含这个类。可能是由于依赖作用域(scope)设置不正确,例如使用了`test`或`provided`,导致依赖没有被打包。 2. 依赖的版本问题:在本地可能有一个较高版本的commons-io库,包含了`IOIterator`类(该类在commons-io 2.7版本引入),而服务器上打包的可能是较低版本的commons-io,没有这个类。 3. 依赖冲突:可能有多个版本的commons-io库,在打包时被Maven的依赖仲裁机制选择了低版本(没有这个类的版本)打包进去。 解决步骤: 1. 检查pom.xml中是否显式声明了commons-io的依赖。如果没有,需要添加;如果有,检查版本是否>=2.7(因为`IOIterator`是在2.7版本引入的)。 2. 检查是否由于传递依赖引入了低版本的commons-io,并且被Maven仲裁机制选中(即最终生效的是低版本)。可以通过`mvn dependency:tree`命令查看依赖树,确定commons-io的实际版本。 3. 确保在打包时(比如使用spring-boot-maven-plugin)将依赖正确打包。 根据提供的引用信息,虽然引用[1][2][3][4]是关于其他类找不到的错误,但解决思路类似:主要是依赖版本和依赖引入的问题。 因此,针对你的pom.xml,我们需要做以下检查: 步骤1:在pom.xml中查找是否有commons-io的依赖声明。如果没有,需要添加;如果有,检查版本。 步骤2:使用`mvn dependency:tree`查看依赖树,确认commons-io的版本。特别要注意是否有其他依赖传递引入了低版本的commons-io,导致冲突。 假设在pom.xml中没有找到显式的commons-io依赖,那么我们很可能需要添加一个。例如: ```xml <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> <!-- 至少2.7以上,推荐使用较新稳定版本 --> </dependency> ``` 如果已经存在,但版本较低,则升级版本。 步骤3:如果依赖树显示有多个版本的commons-io,并且当前生效的是低版本,那么可以通过排除低版本依赖,或者显式声明高版本来解决。 例如,如果另一个依赖传递引入了低版本的commons-io,我们可以这样排除: ```xml <dependency> <groupId>some.group.id</groupId> <artifactId>some-artifact</artifactId> <version>X.Y.Z</version> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> ``` 步骤4:确保打包插件(如spring-boot-maven-plugin)正确配置,将依赖打包进可执行jar。通常,使用spring-boot-maven-plugin默认会生成可执行jar,其中包含所有依赖。 步骤5:重新打包并部署到服务器上测试。 注意:在服务器上启动时,确保使用的是重新打包后的文件。 由于你没有提供完整的pom.xml,我无法具体分析,但你可以按照上述步骤操作。 如果问题仍然存在,请检查服务器上的jar包中是否包含commons-io库。可以通过解压jar包,查看BOOT-INF/lib(如果是Spring Boot项目)或WEB-INF/lib(如果是war项目)目录下是否有commons-io的jar文件,并确认其版本。 此外,如果项目是Spring Boot项目,可以使用Spring Boot的依赖管理来管理版本。例如,在`<properties>`中定义commons-io的版本,并在依赖中引用。 总结解决方案: 1. 添加或升级commons-io依赖到2.7及以上版本。 2. 排除低版本传递依赖。 3. 确保依赖正确打包。 另外,引用[1]中提到stackoverflow的链接,可以参考类似问题的解决思路(虽然问题不同,但都是NoClassDefFoundError)。 请尝试上述步骤,如果问题仍然存在,可以提供pom.xml中的依赖部分或运行`mvn dependency:tree`的输出,以便进一步分析。 相关问题: 1. 如何查看Maven项目的依赖树? 2. 如何解决Maven依赖冲突? 3. Spring Boot项目打包时如何包含依赖? 4. 如何在Maven中排除特定的传递依赖? 5. 如何检查jar包中包含的依赖库? </think>### 解决方案分析 根据错误信息 `java.lang.NoClassDefFoundError: org/apache/commons/io/function/IOIterator`,结合您的 Maven pom.xml 文件,以下是具体原因和解决方案: --- #### **问题原因诊断** 1. **缺少依赖**: - `IOIterator` 类属于 `commons-io` 库(2.7+ 版本引入) - 本地启动正常但服务器报错,说明: - 本地环境可能通过 IDE 隐式加载了该依赖(如 Maven 缓存) - 服务器部署时依赖未正确打包或版本过低 2. **依赖冲突**: - 其他依赖可能传递引入了低版本 `commons-io`(如 2.6 及以下),导致服务器运行时加载了不兼容版本。 --- #### **解决方案步骤** ##### 1. **添加显式依赖** 在 pom.xml 中**显式声明高版本 commons-io 依赖**(至少 2.7+): ```xml <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> <!-- 推荐稳定版本 --> </dependency> ``` ##### 2. **检查依赖冲突** 通过 Maven 命令分析依赖树: ```bash mvn dependency:tree -Dincludes=commons-io ``` - 观察输出中是否存在**低版本 commons-io** - 若存在冲突,在冲突依赖中添加 `<exclusion>`: ```xml <dependency> <groupId>冲突依赖的groupId</groupId> <artifactId>冲突依赖的artifactId</artifactId> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> ``` ##### 3. **验证打包结果** 检查最终部署包(如 JAR/WAR)中的依赖: - 解压部署包,查看 `BOOT-INF/lib`(Spring Boot)或 `WEB-INF/lib` 目录 - 确认包含 `commons-io-2.11.0.jar` - 若缺失,检查 Maven 插件配置(如 `spring-boot-maven-plugin`) ##### 4. **清理与重新构建** ```bash mvn clean package # 强制刷新依赖 ``` --- ### **关键验证点** 1. **版本匹配**: `IOIterator` 类首次出现于 `commons-io:2.7`,确保版本 ≥ 2.7[^1]。 2. **作用域(Scope)**: 依赖的 `scope` 不能为 `provided` 或 `test`,否则服务器运行时无法加载。 3. **部署一致性**: 服务器环境需使用与构建环境相同的 JDK 和 Maven 版本。 --- ### 相关问题 1. 如何快速定位 Maven 依赖冲突? 2. Spring Boot 项目打包时如何排除低版本依赖? 3. 本地与服务器环境差异导致 `NoClassDefFoundError` 的常见原因有哪些? 4. 除了 `commons-io`,还有哪些常用库容易引发版本兼容性问题? [^1]: [Apache Commons IO 2.7 Release Notes](https://commons.apache.org/proper/commons-io/changes-report.html#a2.7) [^2]: [Maven 依赖仲裁机制](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html) [^3]: [Spring Boot Maven 插件配置文档](https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#packaging)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值