热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编码技巧——JDK版本切换/JDK7和JDK6下的文件输入输入

最近有使用低版本JDK实现文件输入输出的需求,主要是妹子计算机专业考研复试上级算法题,输入输入依赖文件而非纯算法代码,并且IDE一般使用J


最近有使用低版本JDK实现文件输入输出的需求,主要是妹子计算机专业考研复试上级算法题,输入输入依赖文件而非纯算法代码,并且IDE一般使用JDK8以下的SDK,导致一些JDK8的API不适用;


较早版本的JDK API代码是操作一大堆的缓冲区Buffer和输入输出流InputStream/OutputStream,代码较为复杂,不利于上机演示,因此帮整理下JDK7/JDK6下较为简洁的文件输入输出代码;



JDK环境配置


为了验证使用的代码能在JDK7/JDK6下能编译成功并正常运行,这里介绍下配置JDK版本的方法;


IDEA


以下是IDEA下的配置方法;


  • 从File->Project Structure入口进入,先设置Project的全局SDK版本和对应的Language Level;


  • 再选择当前module,设置对应的Language Level;


  • 再从Dependencies进入选择Module SDK版本;























补充:如果再切换回JDK8后提示"Information:java: javacTask: 源发行版 8 需要目标发行版 1.8"检查以下配置;










Eclipse


以下是IDEA下的配置方法;


  1. 先设置eclipse【工作空间】workspace的JDK版本,即eclipse中所有项目的编译运行的环境(全局配置)









  1. 将JDK6的JRE添加到Installed JREs中;























  1. 配置当前工程的JDK版本;


  • 先选择工程并右键,选择Properties;
















添加完后选择jre1.7然后生效:









  • 然后将与Java Build Path同页面的Java Compiler—右侧面板设置为1.7









  • 然后将与Java Compiler同页面的Project Facets—右侧面板勾上Java,Version设为1.7









完事;如此看来,可想而知为什么这么多的Java developer选择IDEA作为IED而非eclipse了,真的太难用了!!!



JDK7文件读写使用的API


JDK7中引入了新的文件操作类java.nio.file.Files,它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件;











JDK7读写文件代码示例


工程结构:









代码:


import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/**
* @author Akira
* @description 读写文件工具类
* @date 2023/1/31
*/
public class MyInputAndOutputInJdk7Utils {
public static void main(String[] args) {
// (1) 读入
// 相对路径 工程目录为根目录 文件位于根目录
final List stringList = readAllLinesInJdk7("input.txt");
// 绝对路径
// final List stringList = readAllLinesInJdk7("C:\\IDE_Apps\\myCode\\ltcode\\input.txt");
if (stringList != null) {
for (String lineStr : stringList) {
System.out.println(lineStr);
}
}
System.out.println("-----");
// (2) 输出
final List outputLineStrList &#61; new ArrayList<>();
if (stringList !&#61; null) {
for (String lineStr : stringList) {
final String outputLineStr &#61; lineStr &#43; " output ";
outputLineStrList.add(outputLineStr);
System.out.println(outputLineStr);
}
}
writeAllLinesInJdk7(outputLineStrList, "output.txt");
}
/**
* JDK7下的读取文本的方法
*
* &#64;param filePath 输入文件路径 若输入文件在项目根目录则示例: filePath &#61; "input.txt"
* &#64;return
*/
private static List readAllLinesInJdk7(String filePath) {
try {
return Files.readAllLines(Paths.get(filePath), Charset.forName("UTF-8"));
} catch (IOException e) {
System.out.println("readFile error! e:" &#43; e);
return null;
}
}
/**
* JDK7下的输出文本的方法 重复执行会替换文件内容而不是追加
*
* &#64;param linesStr 每行数据字符串格式
* &#64;param targetFilePath 目标文件路径
* &#64;return
*/
private static void writeAllLinesInJdk7(List linesStr, String targetFilePath) {
try {
Files.write(Paths.get(targetFilePath), linesStr, Charset.forName("UTF-8"));
} catch (IOException e) {
System.out.println("writeFile error! e:" &#43; e);
}
}
}


JDK6文件读写使用的API


JDK6下可选择的API有很多&#xff0c;包括RandomAccessFile、InputStream/OutputStream、FileInputStream/FileOutputStream、BufferedInputStream/BufferedOutputStream等&#xff0c;这里选择写法较为简洁的FileInputStream/FileOutputStream&#xff1b;










JDK6读写文件代码示例


工程结构&#xff1a;









代码&#xff1a;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* &#64;author Akira
* &#64;description 读写文件工具类
* &#64;date 2023/2/1
*/
public class MyInputAndOutputInJdk6Utils {
public static void main(String[] args) {
// (1) 读入
// 相对路径 工程目录为根目录 文件位于根目录
final String allLinesStr &#61; readAllLinesInJdk6("input.txt");
System.out.println(allLinesStr);
// 绝对路径
// final String allLinesStr &#61; readAllLinesInJdk6("C:\\IDE_Apps\\myCode\\ltcode\\input.txt");
System.out.println("-----");
// (2) 输出
final List outputLineStrList &#61; new ArrayList();
outputLineStrList.add("输出第1行");
outputLineStrList.add("输出第2行");
outputLineStrList.add("输出第3行");
for (String outputLineStr : outputLineStrList) {
System.out.println(outputLineStr);
}
writeAllLinesInJdk6(outputLineStrList, "output.txt");
}
/**
* JDK7下的读取文本的方法
*
* &#64;param filePath 输入文件路径 若输入文件在项目根目录则示例: filePath &#61; "input.txt"
* &#64;return
*/
private static String readAllLinesInJdk6(String filePath) {
try {
// 实际就这3行代码: 1.打开文件输入流绑定路径 2.一次性将文件读入字节数组 3.将字节数组转为字符串打印
FileInputStream fis &#61; new FileInputStream(filePath);
// 将文件流一次性读入字节数组中 fis.available()为文件字节长度 这样可以避免中文乱码(因为UTF-8下中文占3字节/英文占1字符 因此不能把中文字节截断)
byte[] allTxtBytes &#61; new byte[fis.available()];
fis.read(allTxtBytes);
fis.close();
// String提供字节数组转字符串的构造函数
return new String(allTxtBytes);
} catch (IOException e) {
System.out.println("readFile error! e:" &#43; e);
return null;
}
}
/**
* JDK7下的输出文本的方法 重复执行会替换文件内容而不是追加
*
* &#64;param linesStr 每行数据字符串格式
* &#64;param targetFilePath 目标文件路径
* &#64;return
*/
private static void writeAllLinesInJdk6(List linesStr, String targetFilePath) {
try {
// 拼接全部文本内容 也可以一行一行的写
final StringBuilder allText &#61; new StringBuilder();
for (String lineStr : linesStr) {
// 手动对list换行
allText.append(lineStr).append("\n");
}
// 实际就这3行代码: 1.打开文件输出流绑定路径 2.写文本字符串的字节流 3.关闭输出流
FileOutputStream fos &#61; new FileOutputStream(targetFilePath);
fos.write(allText.toString().getBytes());
fos.close();
} catch (IOException e) {
System.out.println("writeFile error! e:" &#43; e);
}
}
}




推荐阅读
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
mobiledu2502897207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有