一般的String写入文件都是一行一行写入的,也就是横向顺序写入的,简单的练习下纵向按块写入,如下所示:
思路:
使用2维数据Array[][],然后赋值,很简单。
下面是代码,代码是写着玩的,不是很严谨,没什么实用价值。
import java.io.FileOutputStream; import java.io.OutputStreamWriter; public class 文件按列写 { // 按指定编码的字节数截取字符串 public String subStrMethod(String srcStr, int count, String charSet) throws Exception { if (srcStr == null || srcStr.length() == 0) { return null; } if (charSet == null) { charSet = "utf-8"; } if (srcStr.getBytes(charSet).length <= count) { return srcStr; } int num = 0;// 已经截取字符的长度 int length = 0;// 每个字符的长度 StringBuffer sb = new StringBuffer(); char ch[] = srcStr.toCharArray(); for (int i = 0; i < ch.length; i++) { length = String.valueOf(ch[i]).getBytes(charSet).length; num += length; if (num > count) { break; } sb.append(ch[i]); } return sb.toString(); } public String generateTestData(int num) { StringBuffer sb = new StringBuffer(); for (int i = 1; i <= num; i++) { sb.append("第").append(i).append("行测试数据"); } return sb.toString(); } public void writeContentToFile(String str, String filePath, String charsetName) throws Exception { if (charsetName == null) { charsetName = "utf-8"; } OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream( filePath), charsetName); out.write(str); out.close(); } /** * 优先写第一块 * * @param srcStr * 原字符串 * @param charsetName * 目的字符串编码 * @param perLineTotalLen * 一行总的长度 * @param splitNum * 一行切割块的数量 * @param spaceNum * 切割块直接空格的数量 * @param colSplitLen * 满多少列输出分割标识 * @param splitStr * 分割标识 * @throws Exception */ public String getStrBySplitNum(String srcStr, String charsetName, int perLineTotalLen, int splitNum, int spaceNum, int colSplitLen, String splitStr) throws Exception { String lineSplit = System.getProperty("line.separator"); if (splitNum <= 0) { splitNum = 1; } if (charsetName == null) { charsetName = "utf-8"; } if (srcStr == null || srcStr.length() == 0) { return null; } // 块分割字符串,默认为空行 if (splitStr == null) { splitStr = System.getProperty("line.separator"); } // 每行的字节数大小,默认72 if (perLineTotalLen <= 0) { perLineTotalLen = 72; } // 块之间的空格,默认4个空格 if (spaceNum < 0) { spaceNum = 4; } // 每块的列数 if (colSplitLen < 0) { colSplitLen = perLineTotalLen; } String blockSplitStr = new String(); for (int i = 0; i < spaceNum; i++) { blockSplitStr = blockSplitStr + " "; } blockSplitStr = new String(blockSplitStr); boolean isLastBlock = false; // 优先考虑第一块 String firstBlockStr = new String(); int perBlockLen = 0;// 每块平均长度 int firstBlobkLen = 0;// 第一块的长度 int lastBlockLen = 0; String tmpStr = new String(); int tmpSplitNum = splitNum; int tmpColSplitLen = colSplitLen; StringBuffer resultStr = new StringBuffer(5120); // 行 列 String[][] resultArray = new String[tmpColSplitLen][tmpSplitNum]; String tmpValue = null; while (srcStr != null && srcStr.length() > 0) { firstBlockStr = new String(); isLastBlock = false; perBlockLen = (perLineTotalLen - lastBlockLen - (splitNum - 1) * spaceNum) / splitNum;// 每块平均长度 firstBlobkLen = perBlockLen + (perLineTotalLen - lastBlockLen - (splitNum - 1) * spaceNum) % splitNum;// 第一块的长度 lastBlockLen = lastBlockLen + firstBlobkLen; if (srcStr.getBytes(charsetName).length < firstBlobkLen * colSplitLen) { firstBlockStr = new String(srcStr); colSplitLen = (srcStr.getBytes(charsetName).length + firstBlobkLen - 1) / firstBlobkLen; isLastBlock = true; srcStr = new String(); } else { firstBlockStr = subStrMethod(srcStr, firstBlobkLen * colSplitLen, charsetName); srcStr = new String(srcStr.substring(firstBlockStr.length())); } tmpStr = null; for (int i = 0; i < colSplitLen; i++) { tmpStr = subStrMethod(firstBlockStr, firstBlobkLen, charsetName); if (isLastBlock || splitNum == 1) { resultArray[i][tmpSplitNum - splitNum] = new String(tmpStr + lineSplit); } else { resultArray[i][tmpSplitNum - splitNum] = new String(tmpStr + blockSplitStr); } firstBlockStr = new String(firstBlockStr.substring(tmpStr .length())); } // 可能遇到双字节字符导致实际长度比计算的长度短,需要查看数组是否还能存放数据 srcStr = new String(firstBlockStr + srcStr); tmpStr = null; if (srcStr.getBytes(charsetName).length <= (tmpColSplitLen - colSplitLen) * firstBlobkLen) { for (int k = colSplitLen; k < tmpColSplitLen; k++) { tmpStr = subStrMethod(srcStr, firstBlobkLen, charsetName); if (tmpStr == null) { break; } if (isLastBlock || splitNum == 1) { resultArray[k][tmpSplitNum - splitNum] = new String( tmpStr + lineSplit); } else { resultArray[k][tmpSplitNum - splitNum] = new String( tmpStr + blockSplitStr); } if (srcStr == null || srcStr.length() == 0) { srcStr = new String(); break; } srcStr = new String(srcStr.substring(tmpStr.length())); } } splitNum = splitNum - 1; if (splitNum == 0 && srcStr.length() > 0) { splitNum = tmpSplitNum; tmpValue = null; lastBlockLen = 0; for (int i = 0; i < resultArray.length; i++) { for (int j = 0; j < resultArray[i].length; j++) { tmpValue = resultArray[i][j]; if (tmpValue != null && tmpValue.length() > 0) { resultStr.append(resultArray[i][j]); } } } resultStr.append(splitStr).append(lineSplit); resultArray = new String[tmpColSplitLen][tmpSplitNum]; } } tmpValue = null; // 修正数组的值 for (int i = 0; i < resultArray.length; i++) { for (int j = 0; j < resultArray[i].length; j++) { tmpValue = resultArray[i][j]; if (tmpValue != null && tmpValue.length() > 0 && (i + 1 < tmpColSplitLen) && (j >= 1) && (resultArray[i + 1][j] == null)) { for (int k = i + 1; k < resultArray.length; k++) { resultArray[k][j - 1] = new String( resultArray[k][j - 1] + lineSplit); } break; } } } tmpValue = null; // 得到数组的值 for (int i = 0; i < resultArray.length; i++) { for (int j = 0; j < resultArray[i].length; j++) { tmpValue = resultArray[i][j]; if (tmpValue != null && tmpValue.length() > 0) { resultStr.append(resultArray[i][j]); } } } resultStr.append(splitStr); return resultStr.toString(); } public static void main(String[] args) throws Exception { 文件按列写 t = new 文件按列写(); String testStr = t.generateTestData(63); String splitStr = "-------------------------------我是分隔符------------------------------"; //90 每行90字节 //4 分割4列 //5 列之间5个空格 //14 每列14个字节 String content = t.getStrBySplitNum(testStr, "utf-8", 90, 4, 5, 14, splitStr); t.writeContentToFile(content, "f:/saveFile/temp/result.txt", "utf-8"); } }
本文系原创,转载请注明出处,谢谢。
相关推荐
白色大气风格的旅游酒店企业网站模板.zip
python实现用户注册
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
内容概要:文档名为《平方表,派表集合.docx》,主要内容是1至1000的平方值以及1至1000与π的乘积结果。每个数字从1开始,逐步增加至1000,对应地计算了平方值和乘以π后的值。所有计算均通过Python脚本完成,并在文档中列出了详细的计算结果。 适合人群:需要进行数学计算或程序验证的学生、教师和研究人员。 使用场景及目标:用于快速查找特定数字的平方值或其与π的乘积,适用于教学、科研及程序测试等场景。 阅读建议:可以直接查阅所需的具体数值,无需从头到尾逐行阅读。建议在使用时配合相应的计算工具,以验证和拓展数据的应用范围。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色大气风格的健身私人教练模板下载.zip
白色简洁风的商务网站模板下载.zip
白色大气风格的前端设计案例展示模板.zip
内容概要:本文介绍了两个有趣的圣诞树项目方向:一是使用Arduino或Raspberry Pi开发可编程的圣诞树灯光控制系统;二是基于MATLAB开发一个圣诞树模拟器。前者通过硬件连接、编写Arduino/Raspberry Pi程序、MATLAB控制程序来实现LED灯带的闪烁;后者则通过创建圣诞树图形、添加动画效果、用户交互功能来实现虚拟的圣诞树效果。 适合人群:具备基本电子工程和编程基础的爱好者和学生。 使用场景及目标:①通过硬件和MATLAB的结合,实现实际的圣诞树灯光控制系统;②通过MATLAB模拟器,实现一个有趣的圣诞树动画展示。 阅读建议:读者可以根据自己的兴趣选择合适的项目方向,并按照步骤进行动手实践,加深对硬件编程和MATLAB编程的理解。
白色扁平风格的温室大棚公司企业网站源码下载.zip
Navicat.zip
内容概要:本文详细介绍了主成分分析(PCA)技术的原理及其在Scikit-learn库中的Python实现。首先讲解了PCA的基本概念和作用,接着通过具体示例展示了如何使用Scikit-learn进行PCA降维。内容涵盖了数据准备、模型训练、数据降维、逆转换数据等步骤,并通过可视化和实际应用案例展示了PCA的效果。最后讨论了PCA的局限性和参数调整方法。 适合人群:数据科学家、机器学习工程师、数据分析从业者及科研人员。 使用场景及目标:适用于高维数据处理,特别是在需要降维以简化数据结构、提高模型性能的场景中。具体目标包括减少计算复杂度、提高数据可视化效果和改进模型训练速度。 其他说明:本文不仅提供了详细的代码示例,还讨论了PCA在手写数字识别和机器学习模型中的应用。通过比较原始数据和降维后数据的模型性能,读者可以更好地理解PCA的影响。
VOC格式的数据集转COCO格式数据集 VOC格式的数据集转YOLO格式数据集。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
数字信号处理课程设计.doc
白色扁平化风格的灯饰灯具销售企业网站模板.zip
华豫佰佳组合促销视图.sql
白色大气风格的商务团队公司模板下载.zip
白色大气风格的VPS销售网站模板.zip