代码

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

//有一些文件,当从jar转换成txt时,发现它为每个文件外建了一个同名的文件夹来保存这个文件
//大概是默认地把一本书建立一个文件夹,然后按照每章独立生成一个文件
//目标是把所有只有一个文件的文件夹里的文件移出,然后删除该文件夹
public class HandleTextBooks
{
private static void deleteFolderOrFile(File file)
{
  if(file.exists())
  {
   if(file.isDirectory())//文件,需要遍历目录下文件或文件夹,文件直接删除,文件夹则递归
   {
    File []files = file.listFiles();
    for(int i=0;i<files.length;i++)
     deleteFolderOrFile(files[i]);
   }
   file.delete();//删除文件或空文件夹
  }
}
//去除点及后缀,取得文件名
static String getFileNameWithoutPostfix(String fileName)
{
  int index = fileName.lastIndexOf('.');
  return fileName.substring(0, index);
}

//参数file是一个txt文件,这个方法把这该文件复制到所在目录的上一层目录里,再把该文件所在的目录删除
static void createATextBook(File file) throws IOException
{
  //在这个例子中,如果文件名(除去“点+后缀”)与所在目录名相同,才需要进行这个方法的操作
  System.out.println(getFileNameWithoutPostfix(file.getName()));System.out.println(file.getParentFile().getName());
  if(getFileNameWithoutPostfix(file.getName()) != file.getParentFile().getName())
   return;
  String fileName = file.getAbsolutePath();
  System.out.println("function 'void createATextBook(File file)-1':"+fileName);
  InputStreamReader reader = new InputStreamReader(new FileInputStream(fileName),"GB2312");
  BufferedReader in = new BufferedReader(reader);
  String readLineStr = new String();    
  //在文件所在目录的上一级目录创建一个与之同名的文件
  System.out.println("function 'void createATextBook(File file)-2':"+file.getParentFile().getParent());
     DataOutputStream out = new DataOutputStream(
    new BufferedOutputStream(new FileOutputStream(file.getParentFile().getParent()+"/"+file.getName())));
     while((readLineStr = in.readLine())!= null)
     {
      out.write((readLineStr+"\r\n").getBytes("GB2312"));//在Windows下换行必须是"\r\n"
     }
     in.close();
     out.close();
     deleteFolderOrFile(file.getParentFile());//删除该文件所在的目录
}
//为了递归调用,单独写成一个方法
static void handleTextBooks(File file)throws IOException
{
  if(file.exists()&&file.isDirectory())
  {
   File temFile = file.listFiles()[0];
   if((file.list().length == 1)&&(temFile.isFile()))
   {
    createATextBook(temFile);
   }
   else
   {
    File []files = file.listFiles();
    for(int i=0;i<files.length;i++)
    {
     handleTextBooks(files[i]);
    }
   }
  }
}
public static void main(String[]args)throws IOException
{
  File file = new File("F:/EBooks/常识作d/");
  handleTextBooks(file);
}
}

:在Java中,File对象即可以是文件也可以是文件夹,所以在一个File文件夹上要写入数据,会提示:拒绝访问。

Java不提供直接复制的API,所以复制一个文件时,只能是先读取再写入。实验过程中发现,读一行写一行的执行速度远快于读全文再写全文。

实际上还有些情况,即文件与所在目录名不同,但仍属于本文所要处理的那种情况,所以,可以简单地把方法static void createATextBook(File file) throws IOException
中的第一段注释掉。

效果

原来情况下,每个文件夹下都有唯一一个同名文件:

处理之后

转载于:https://www.cnblogs.com/xiaxiazl/archive/2012/03/24/2415917.html

动手解决jar转txt软件的一个缺陷相关推荐

  1. 移动4g信号显示无服务器,自己动手解决室内4g信号差 信号放大器一般由主机室内天线...

    导读:聊到信号,大多数人都知道,有人问室内4g信号不好怎么办,事实上联通室内4g信号不好怎么办,这到底是咋回事?其实怎样加强室内手机信号呢,下面小编整理了自己动手解决室内4g信号差,一起来看看吧. 自 ...

  2. 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记

    第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记 几乎所有从IDEA官网上下载安装在win上,采用默认方式自动运行的都 会遇到这个问题. er ...

  3. 怎样才能把一个代码变成软件成品?一个初学者的困惑,我们写的代码都只能是解决一些数学问题而已。怎么把它变成一个软件。

    小弟疑惑... 怎样才能把一个代码变成软件成品?一个初学者的困惑,我们写的代码都只能是解决一些数学问题而已.怎么把它变成一个软件. 大神月... 对于您这个问题,当初也是我的好奇之处啊!其实你学好一门 ...

  4. 解决win10任务栏软件图标变成白色的问题

    解决win10任务栏软件图标变成白色的问题 问题描述 电脑任务栏锁定的某程序图标显示为白色,而其它图标显示正常 解决方法 方法一:将以下代码复制到记事本另存为:清理图标缓存.bat 文件,然后双击运行 ...

  5. JavaHelp软件的一个定制实用程序类

    JavaHelp软件的一个定制实用程序类 发布者:IBM 日期: 2000-07-01 00:00:00 浏览次数:0 (共有_条评论) 查看评论 | 我要评论   级别: 初级 Marshall L ...

  6. 系统管理找不到请求的服务器,解决Win10无法打开软件提示服务器没有及时响应或控制请求的方法...

    最近,有使用Win10系统的用户,遇到这么一个问题,那就是在打开软件的时候总是遇到错误的提示:服务器没有及时响应或控制请求,然后就打开软件失败.那遇到这样的问题我们应该这么去解决它呢?下面就由下班和大 ...

  7. was服务器里面jar包_如何在was中解决jar包冲突

    如何在 was 中解决 jar 包冲突 大型的基于 WebSphere 的项目开发中,同一个 WebSphere Application Server (以下 简称 WAS ) 上会部署多个应用程序, ...

  8. [已解决]win11家庭版安装软件提示,系统策略禁止安装此设备。请与系统管理员联系

    由于之前在电脑上安装3D max后,但是没卸载干净,下载了各种小工具,结果导致我被这个问题困扰了好久,例如:CAD,solidworks都无法安装,尤其是运行库无法卸载无法安装,最后这个问题也是完美解 ...

  9. idea解决jar包冲突的实用技巧

    背景:在项目开发过程中,我们经常会使用到maven来管理jar包并作为项目打包构建工具,但是经常会遇到jar包冲突的问题 下面就分享一下解决jar包冲突的几个实用技巧 1.比如说:经常遇到NoClas ...

最新文章

  1. 新的一年你该如何起飞
  2. FPGA的配置引脚以及配置过程
  3. 极简易版专家聊天程序--JAVA练手
  4. LPeg 0 10的编译与使用
  5. 小程序入门学习18--springboot环境配置02
  6. AngularJS app.run()文档?
  7. Atitit 图片验证码功能设计文档总结目录1.1. 使用图片验证码img src标签设置图片。。验证码图片有png,jpg,svg等格式。。 11.2. Php png图像 11.3. P
  8. wherehows VM使用
  9. Android开机速度优化(第三篇)
  10. 爬去当当热销图书信息
  11. python向excel删除数据_python 操作 excel 系列之:数据清洗
  12. c语言中局部变量存放在哪里,C语言全局变量存放在哪里?
  13. 执行mvn clean报错Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could
  14. 作为无人机方面做嵌入式编写的飞控总结6--IMU惯性系统和GPS导航系统融合小结1(惯性导航算法)
  15. VB 获取文件名后缀
  16. 清远市高中计算机考试时间,2017年清远市中考体育考试安排
  17. Ebay跨境智星:全自动批量注册及下单软件
  18. 什么是IBinder
  19. 程序员视角的计算机系统 第一章 计算机系统 之旅
  20. 微信15分钟视频怎么发送(简单实用的方法)

热门文章

  1. LeetCode 2126. 摧毁小行星(贪心)
  2. LeetCode 2048. 下一个更大的数值平衡数(枚举)
  3. LeetCode 2001. 可互换矩形的组数
  4. LeetCode 718. 最长重复子数组(DP)
  5. 剑指Offer - 面试题46. 把数字翻译成字符串(DP)
  6. LeetCode 1252. 奇数值单元格的数目
  7. 数据结构--散列表 Hash Table
  8. PHP方向+go+rpc+swoole,瞅瞅 PHP+Swoole 作为网络通信框架
  9. mysql1033错误存储引擎_MySQL Innodb存储引擎因为缓存配置出现的错误
  10. web基础编程-图片管理网站