`
dyllove98
  • 浏览: 1409519 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39189
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80270
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133389
社区版块
存档分类
最新评论

关于读取文件内容时报sun.io.MalformedInputException的问题

阅读更多
在网上找到的原因是这样的:
这个问题产生的原因是IBM在JDK 1.4版本中为了追求对io通道的高效率改变了JDK 1.3中对io通道中异常处理的策略。IBM JDK 1.4中对于io通道的异常处理更加严格,因此系统中会报上面的错误。
解决这一问题的办法是不使用IBM JDK 1.4中默认的io通道,而使用nio通道。具体的做法如下:
1.打开管理控制台,找到并选择运行这个JSP的应用服务器
2.依次选择进程定义,java虚拟机,一般JVM自变量
3.添加-Dibm.stream.nio=true
4.确定,保存
5.重新启动该服务器

本来我就怀疑又是IBM JDK的问题,果然被我不幸言中了,再次表示一下郁闷!

我发现在我需要读取的文件当中存在这样的一些字符:  "怃噱珀腓镱呐涉启螓周%犴篾裱"

我原来是用下面这段程序读取这个文件的内容并打印的:
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String str="";
String result = "";
     while((str=br.readLine())!=null){
           result += str + "\n"; 
     }
即逐行读取的方法,我想也是一般的方法,但是就是这个readline方法导致了IBM JDK 1.4.2 报了这个sun.io.MalformedInputException的问题.

我现在使用的解决方法如下:
    String result = "";
    StringBuffer sBuffer=new StringBuffer();
             FileInputStream fis=new FileInputStream(file);
    BufferedInputStream bis=new BufferedInputStream(fis);
    String tempStr;
    byte[] b = new byte[1024];
    int i = 0;
    while ((i = bis.read(b)) > 0) {
     tempStr=new String(b,0,i);
     sBuffer.append(tempStr);
    }
    result = sBuffer.toString();
即逐字节读取的方法.这样处理就可以正常读取了!

具体到底为什么会出现这种问题现在还没弄明白,估计也弄不明白了!



解决代码如下

————————————————————————————————————————————————

FileInputStream fis = new FileInputStream(filePath);
    BufferedReader bufRd = new BufferedReader(new InputStreamReader(fis, "shift_jis"));
    String strLine = "";
    while((strLine = bufRd.readLine())!= null){
     //because the IBM Jdk is special in the access of IO inputstream or outputstream
     byte[] bts = strLine.getBytes("shift_jis");
     sun.io.ByteToCharConverter convertor = sun.io.ByteToCharConverter.getConverter("shift_jis");
     char[] charArray = convertor.convertAll(bts);
     for(int j = 0;j < charArray.length;j ++){
      buffer.append(String.valueOf(charArray[j]));
     }
     buffer.append("\n");
    }
    bufRd.close();
分享到:
评论

相关推荐

    使用System.IO.Ports读取COM口数据

    C#串口编程之使用System.IO.Ports读取COM口数据 C#串口编程是计算机编程中的一种重要技术,用于控制和管理串行通信端口。串行通信是一种常用的数据传输方式,广泛应用于工业自动化、机器人控制、医疗器械等领域。...

    lumenworks.framework.io.Dll

    例如,通过使用LumenWorks.IO.Csv命名空间中的CsvReader类,开发者可以快速读取CSV文件,并将其转换为强类型的数据结构。 对于C++开发者,虽然C++本身不直接支持DLL,但可以使用DllImport特性来调用lumenworks....

    如何使用 System.IO 和 Visual C# 读取文本文件.doc

    在.NET Framework中,System.IO命名空间提供了用于读取、写入和操作文件及流的一系列类。使用Visual C#,我们可以方便地利用这些类来读取文本文件。本篇文章将详细讲解如何使用System.IO和Visual C#进行文本文件的...

    java_io.rar_java 文件操作_java 读取 本地文件_java.io转动_文件操作

    本资源“java_io.rar”提供了关于如何在Java中进行文件操作的示例代码,包括读取、移动、删除和复制文件等常见任务。我们将深入探讨这些主题,以便更好地理解Java I/O API的使用。 首先,让我们从读取本地文件开始...

    lumenworks.framework.io.dll .net读写CSV

    LumenWorks.Framework.IO.dll库为.NET开发者提供了一系列方便的API,允许他们高效地读取和写入CSV文件。例如,你可以创建一个`CsvReader`对象来读取文件,或者使用`CsvWriter`来创建新的CSV文件。这些类提供了诸如...

    org.apache.commons.io 的jar包大全

    9. **文件内容读写**:提供方便的方法来读取和写入文件内容,包括读取整个文件到字符串,或者写字符串到文件。 10. **临时文件和目录**:方便地创建临时文件和目录。 11. **对象序列化和反序列化**:简化了对象到...

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    org.apache.commons.io 包

    `org.apache.commons.io`是这个库的核心包,包含了许多与文件、流、过滤器、读写操作相关的类和工具。 1. **文件操作**: `FileUtils` 类提供了大量的静态方法,用于执行文件和目录的操作,如复制、移动、删除、创建...

    学会用C#文件读取shp(shapefile格式)文件

    如果你选择使用NetTopologySuite,可以使用`NetTopologySuite.IO.ShapeFileReader`类来读取shp文件。 3. **读取几何数据**: 通过`ShapeFile`对象,我们可以获取几何记录。例如,使用SharpMap,我们可以遍历每个...

    16课 NodeJS基础-第6天-{socket.io聊天室、文件操作 }.rar

    在本课程中,我们将深入探讨 Node.js 的基础,特别是第6天的主题——如何利用 socket.io 实现聊天室功能以及进行文件操作。 一、socket.io 聊天室 Socket.IO 是一个实时应用框架,它允许在客户端和服务器之间进行...

    java 读取PDF文件中的内容

    在Java编程环境中,读取PDF文件中的内容是一个常见的任务,特别是在处理文档自动化或者数据分析时。PDF(Portable Document Format)是一种跨平台的文件格式,用于精确地保留文档的格式和内容。下面将详细介绍如何...

    System.IO.Packing2.0 lib.rar

    System.IO.Packaging是.NET Framework中的一个库,主要用于处理打包和解包操作,例如创建、读取和修改基于Open Packaging Conventions(OPC)的文件,如ZIP档案、Microsoft Office文档(.docx, .xlsx等)。...

    txt文件读写,使用c#的system.io

    在C#编程中,System.IO命名空间提供了丰富的类和方法,用于处理文件和流操作,包括读取和写入文本文件。在这个特定的例子中,我们将关注如何使用C#的System.IO来读取和写入TXT文件,特别是通过流的方式。 首先,让...

    System.IO System.IO C#

    通过 `System.IO` 命名空间提供的类,开发者可以轻松地读取、写入、创建、复制、删除文件以及管理目录等。在给定的内容中,主要涉及到了 `System.IO` 命名空间下的几个关键类:`BinaryReader`、`BinaryWriter`、`...

    C#读取outlook中msg文件改进版

    但如果你不想依赖外部库,可以使用System.IO.Packaging命名空间中的类,如Package和Part,它们提供了一种读取MSG文件内容的方法。 下面是一个基本的步骤概览: 1. **导入必要的库**:首先,你需要在项目中引用对...

    LumenWorks.Framework.IO.dll

    unity LumenWorks.Framework.IO.dll CSV读取动态库,快速、简便

    C#编程如何从文件中读取文件内容

    通过使用System.IO命名空间中的对象,特别是System.IO.StreamReader类,我们可以轻松地读取文件内容。本文将详细介绍如何使用C#从文件中读取文件内容。 知识点1:使用System.IO 命名空间 为了读取文件内容,我们...

    C#实现选择文件读取文件内容.zip

    读取文件内容通常使用`System.IO`命名空间中的类。最常见的方法是使用`File`或`StreamReader`。例如,可以使用`File.ReadAllText()`一次性读取整个文件内容,或者使用`StreamReader`逐行读取。如果`Form1.cs`中的...

    Java基于IO流读取文件的方法

    本文将深入探讨如何使用IO流来读取文件,并通过实例代码详细解释每一个步骤。 首先,要读取一个文件,我们需要获取文件的路径。在给定的示例中,路径是通过`TEST.class.getResource("/simu")`获取的,这通常用于...

    System.IO.EndOfStreamException(解决方案).md

    System.IO.EndOfStreamException(解决方案).md

Global site tag (gtag.js) - Google Analytics