爱问知识人 爱问教育 医院库

java文件流的问题!急

首页

java文件流的问题!急

java怎么在文件的指定位置插入数据,而不覆盖指定位置后原有的数据?

提交回答
好评回答
  • 2019-03-07 23:50:23
      FileOperation是自定义的类来实现此功能J2SDK的API未提供此功能。
    insert函数写了2个,一个是向文件尾加(最后一个),一个向指定位置加
    import  。BufferedReader;
    import  。File;
    import  。
      FileNotFoundException; import 。FileOutputStream; import 。FileReader; import 。IOException; public class Test { private Test(String filePath, int index, String content) { File f = new File(filePath); FileOperation fo; String errMsg = ""; try { fo = new FileOperation(f); int error = sert(index, content); switch (error) { case 0: errMsg = "OK"; break; case -1: errMsg = "Output File Not Found!"; break; case -2: errMsg = "Insert position too far"; break; } intln(errMsg); } catch (IOException e) { intStackTrace(); } } public static void main(String[] args) { Test t = new Test("d:\\test。
      txt", 5, "abc"); } } class FileOperation { private StringBuffer sb = new StringBuffer(); private File orgFile = null; public FileOperation(File f) throws IOException{ orgFile = f; BufferedReader br = null; try { br = new BufferedReader(new FileReader(orgFile)); while ( ady()) { sb。
      append( adLine() + "\r\n"); } } catch (FileNotFoundException e) { intStackTrace(); } finally { ose(); br = null; } } public int insert(int x, String str) throws IOException{ if (x > sb。
      length()) { return -2; } sert(x, str); FileOutputStream fos = null; try { fos = new FileOutputStream(orgFile); fos。
      write( String()。getBytes()); fos。flush(); } catch (FileNotFoundException e) { intStackTrace(); return -1; } finally { ose(); fos = null; } return 0; } public int insert(String str) throws IOException{ sb。
      append(str); FileOutputStream fos = null; try { fos = new FileOutputStream(orgFile); fos。write( String()。
      getBytes()); fos。
      flush(); } catch (FileNotFoundException e) { intStackTrace(); return -1; } finally { ose(); fos = null; } return 0; } }。

    农***

    2019-03-07 23:50:23

其他答案

    2019-03-08 00:35:59
  •   朋友你好,用使用 javadoc 标记可以做到。具体说明如下::
      javadoc 标记是插入文档注释中的特殊标记,它们用于标识代码中的特殊引用。javadoc 标记由“@”及其后所跟的标记类型和专用注释引用组成。记住了,三个部分——@、标记类型、专用注释引用。
      不过我宁愿把它分成两部分:@ 和标记类型、专用注释引用。虽然 @ 和 标记类型之间有时可以用空格符分隔,但是我宁愿始终将它们紧挨着写,以减少出错机会。   javadoc 标记有如下一些: 标记 用于 作用 @author 对类的说明 标明开发该类模块的作者 @version 对类的说明 标明该类模块的版本 @see 对类、属性、方法的说明 参考转向,也就是相关主题 @param 对方法的说明 对方法中某参数的说明 @return 对方法的说明 对方法返回值的说明 @exception 对方法的说明 对方法可能抛出的异常进行说明   下面详细说明各标记。
         1。 @see 的使用   @see 的句法有三种:   @see 类名   @see #方法名或属性名   @see 类名#方法名或属性名   类名,可以根据需要只写出类名 (如 String) 或者写出类全名 (如 ng。
      String)。那么什么时候只需要写出类名,什么时候需要写出类全名呢?   如果 java 源文件中的 import 语句包含了的类,可以只写出类名,如果没有包含,则需要写出类全名。 ng 也已经默认被包含了。这和 javac 编译 java 源文件时的规定一样,所以可以简单的用 javac 编译来判断,源程序中 javac 能找到的类,javadoc 也一定能找到;javac 找不到的类,javadoc 也找不到,这就需要使用类全名了。
         方法名或者属性名,如果是属性名,则只需要写出属性名即可;如果是方法名,则需要写出方法名以及参数类型,没有参数的方法,需要写出一对括号。如 成员类型 成员名称及参数 @see 句法 属性 number @see number 属性 count @see count 方法 count() @see count() 方法 show(boolean b) @see show(boolean) 方法 main(String[] args) @see main(String[])   有时也可以偷懒:假如上例中,没有 count 这一属性,那么参考方法 count() 就可以简写成 @see count。
      不过,为了安全起见,还是写全 @see count() 比较好。   @see 的第二个句法和第三个句法都是转向方法或者属性的参考,它们有什么区别呢?   第二个句法中没有指出类名,则默认为当前类。所以它定义的参考,都转向本类中的属性或者方法。
      而第三个句法中指出了类名,则还可以转向其它类的属性或者方法。   关于 @see 标记,我们举个例说明。由于 @see 在对类说明、对属性说明、对方法说明时用法都一样,所以这里只以对类说明为例。 /** * @see String * @see ng。
      StringBuffer * @see #str * @see #str() * @see #main(String[]) * @see Object#toString() */ public class TestJavaDoc { } 生成的文档的相关部分如下图:   String 和 StringBuffer 都是在 ng 包中,由于这个包是默认导入了的,所以这两个类可以直接写类名,也可以写类全名。
      str、str() 为同名属性和方法,所以方法名需要用 () 区分。main 是带参数的方法,所以在 () 中指明了参数类型。toString() 虽然在本类中也有 (从 Object 继承的),但我们是想参考 Object 类的 toString() 方法,所以使用了 Object#toString()。
         奇怪的是,为什么其中只有 str、str() 和 main(String[]) 变成了链接呢?那是因为编译时没有把 ng 包或者 Stirng、StringBuffer、Object 三个类的源文件一起加入编译,所以,生成的文档没有关于那三个类的信息,也就不可以建立链接了。
      后面讲解 javadoc 编译命令的时候还会详细说明。   上例中如果去把类中的 str 属性去掉,那么生成的文档又会有什么变化呢?你会发现,原来是 str, str(),而现在变成了 str(), str(),因为 str 属性已经没有了,所以 str 也表示方法 str()。
         2。 使用 @author、@version 说明类   这两个标记分别用于指明类的作者和版本。缺省情况下 javadoc 将其忽略,但命令行开关 -author 和 -version 可以修改这个功能,使其包含的信息被输出。这两个标记的句法如下:   @author 作者名   @version 版本号   其中,@author 可以多次使用,以指明多个作者,生成的文档中每个作者之间使用逗号 (,) 隔开。
      @version 也可以使用多次,只有第一次有效,生成的文档中只会显示第一次使用 @version 指明的版本号。如下例 /** * @author Fancy * @author Bird * @version Version 1。
      00 * @version Version 2。00 */ public class TestJavaDoc { }   生成文档的相关部分如图:   从生成文档的图示中可以看出,两个 @author 语句都被编译,在文档中生成了作者列表。
      而两个 @version 语句中只有第一句被编译了,只生成了一个版本号。   从图上看,作者列表是以逗号分隔的,如果我想分行显示怎么办?另外,如果我想显示两个以上的版本号又该怎么办?   ——我们可以将上述两条 @author 语句合为一句,把两个 @version 语句也合为一句:   @author Fancy
    Bird   @version Version 1。
      00
    Version 2。00   结果如图:   我们这样做即达到了目的,又没有破坏规则。@author 之后的作者名和 @version 之后的版本号都可以是用户自己定义的任何 HTML 格式,所以我们可以使用
    标记将其分行显示。
      同时,在一个 @version 中指明两个用
    分隔的版本号,也没有破坏只显示第一个 @version 内容的规则。   3。 使用 @param、@return 和 @exception 说明方法   这三个标记都是只用于方法的。
      @param 描述方法的参数,@return 描述方法的返回值,@exception 描述方法可能抛出的异常。它们的句法如下:   @param 参数名 参数说明   @return 返回值说明   @exception 异常类名 说明   每一个 @param 只能描述方法的一个参数,所以,如果方法需要多个参数,就需要多次使用 @param 来描述。
         一个方法中只能用一个 @return,如果文档说明中列了多个 @return,则 javadoc 编译时会发出警告,且只有第一个 @return 在生成的文档中有效。   方法可能抛出的异常应当用 @exception 描述。由于一个方法可能抛出多个异常,所以可以有多个 @exception。
      每个 @exception 后面应有简述的异常类名,说明中应指出抛出异常的原因。需要注意的是,异常类名应该根据源文件的 import 语句确定是写出类名还是类全名。   示例如下: public class TestJavaDoc { /** * @param n a switch * @param b excrescent parameter * @return true or false * @return excrescent return * @exception ng。
      Exception throw when switch is 1 * @exception NullPointerException throw when parameter n is null */ public boolean fun(Integer n) throws Exception { switch ( Value()) { case 0: break; case 1: throw new Exception("Test Only"); default: return false; } return true; } }   使用 javadoc 编译生成的文档相关部分如下图:   可以看到,上例中 @param b excrescent parameter 一句是多余的,因为参数只是一个 n,并没有一个 b但是 javadoc 编译时并没有检查。
      因此,写文档注释时一定要正确匹配参数表与方法中正式参数表的项目。如果方法参数表中的参数是 a,文档中却给出对参数 x 的解释,或者再多出一个参数 i,就会让人摸不着头脑了。@exceptin 也是一样。   上例程序中并没有抛出一个 NullPointerException,但是文档注释中为什么要写上这么一句呢,难道又是为了演示?这不是为了演示描述多余的异常也能通过编译,而是为了说明写异常说明时应考运行时 (RunTime) 异常的可能性。
      上例程序中,如果参数 n 是给的一个空值 (null),那么程序会在运行的时候抛出一个 NullPointerException,因此,在文档注释中添加了对 NullPointerException 的说明。   上例中的 @return 语句有两个,但是根据规则,同一个方法中,只有第一个 @return 有效,其余的会被 javadoc 忽略。
      所以生成的文档中没有出现第二个 @return 的描述。   讲到这里,该怎么写文档注释你应该已经清楚了,下面就开始讲解 javadoc 的常用命令。 运行 javadoc -help 可以看到 javadoc 的用法,这里列举常用参数如下: 用法:   javadoc [options] [packagenames] [sourcefiles] 选项: -public 仅显示 public 类和成员 -protected 显示 protected/public 类和成员 (缺省) -package 显示 package/protected/public 类和成员 -private 显示所有类和成员 -d 输出文件的目标目录 -version 包含 @version 段 -author 包含 @author 段 -splitindex 将索引分为每个字母对应一个文件 -windowtitle 文档的浏览器窗口标题   javadoc 编译文档时可以给定包列表,也可以给出源程序文件列表。
      例如在 CLASSPATH 下有两个包若干类如下:   fancy。Editor   fancy。Test   fancy。editor。ECommand   fancy。editor。EDocument   fancy。editor。
      EView   这里有两个包 (fancy 和 fancy。editor) 和 5 个类。那么编译时 (Windows 环境) 可以使用如下 javadoc 命令:   javadoc fancy\Test。java fancy\Editor。
      java fancy\editor\ECommand。java fancy\editor\EDocument。java fancy\editor\EView。java   这是给出 java 源文件作为编译参数的方法,注意命令中指出的是文件路径,应该根据实际情况改变。
      也可以是给出包名作为编译参数,如:   javadoc fancy fancy。editor   用浏览器打开生成文档的 ml 文件即可发现两种方式编译结果的不同,如下图:   用第二条命令生成的文档被框架分成了三部分:包列表、类列表和类说明。
      在包列表中选择了某个包之后,类列表中就会列出该包中的所有类;在类列表中选择了某个类之后,类说明部分就会显示出该类的详细文档。而用第一条命令生成的文档只有两部分,类列表和类说明,没有包列表。这就是两种方式生成文档的最大区别了。   下面再来细说选项。
         -public、-protected、-package、-private 四个选项,只需要任选其一即可。它们指定的显示类成员的程度。它们显示的成员多少是一个包含的关系,如下表: -private (显示所有类和成员) -package (显示 package/protected/public 类和成员) -protected (显示 protected/public 类和成员) -public (仅显示 public 类和成员)   -d 选项允许你定义输出目录。
      如果不用 -d 定义输出目录,生成的文档文件会放在当前目录下。-d 选项的用法是   -d 目录名   目录名为必填项,也就是说,如果你使用了 -d 参数,就一定要为它指定一个目录。这个目录必须已经存在了,如果还不存在,请在运行 javadoc 之前创建该目录。
         -version 和 -author 用于控制生成文档时是否生成 @version 和 @author 指定的内容。不加这两个参数的情况下,生成的文档中不包含版本和作者信息。   -splitindex 选项将索引分为每个字母对应一个文件。
      默认情况下,索引文件只有一个,且该文件中包含所有索引内容。当然生成文档内容不多的时候,这样做非常合适,但是,如果文档内容非常多的时候,这个索引文件将包含非常多的内容,显得过于庞大。使用 -splitindex 会把索引文件按各索引项的第一个字母进行分类,每个字母对应一个文件。
      这样,就减轻了一个索引文件的负担。   -windowtitle 选项为文档指定一个标题,该标题会显示在窗口的标题栏上。如果不指定该标题,而默认的文档标题为“生成的文档(无标题)”。该选项的用法是:   -windowtitle 标题   标题是一串没有包含空格的文本,因为空格符是用于分隔各参数的,所以不能包含空格。
      同 -d 类似,如果指定了 -windowtitle 选项,则必须指定标题文本。   到此为止,Java 文档和 javadoc 就介绍完了。javadoc 真的能让我们在 Java 注释上做文章——生成开发文档。 Trackback: 。
      

    严***

    2019-03-08 00:35:59

  • 2019-03-08 00:28:09
  •   什么是虚拟机? 
    虚拟机的概念比较宽泛,通常人们接触到的虚拟机概念有VMware那样的硬件模拟软件,也有JVM这样的介于硬件和编译程序之间的软件。这里所指的是后者。 
    虚拟机是一个抽象的计算机,和实际的计算机一样,具有一个指令集并使用不同的存储区域。
      它负责执行指令,还要管理数据、内存和寄存器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。 Java虚拟机 一、什么是Java虚拟机 Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。
      Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 1。为什么要使用Java虚拟机 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。
      而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
      Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 2。谁需要了解Java虚拟机 Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。
      对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。
       3。Java虚拟机支持的数据类型 Java虚拟机支持Java语言的基本数据类型如下: byte://1字节有符号整数的补码 short://2字节有符号整数的补码 int://4字节有符号整数的补码 long://8字节有符号整数的补码 float://4字节IEEE754单精度浮点数 double://8字节IEEE754双精度浮点数 char://2字节无符号Unicode字符 几乎所有的Java类型检查都是在编译时完成的。
      上面列出的原始数据类型的数据在Java执行时不需要用硬件标记。操作这些原始数据类型数据的字节码(指令)本身就已经指出了操作数的数据类型,例如iadd、ladd、fadd和dadd指令都是把两个数相加,其操作数类型别是int、long、float和double。
      虚拟机没有给boolean(布尔)类型设置单独的指令。boolean型的数据是由integer指令,包括integer返回来处理的。boolean型的数组则是用byte数组来处理的。虚拟机使用IEEE754格式的浮点数。不支持IEEE格式的较旧的计算机,在运行Java数值计算程序时,可能会非常慢。
       虚拟机支持的其它数据类型包括: object//对一个Javaobject(对象)的4字节引用 returnAddress//4字节,用于jsr/ret/jsr-w/ret-w指令 注:Java数组被当作object处理。 虚拟机的规范对于object内部的结构没有任何特殊的要求。
      在Sun公司的实现中,对object的引用是一个句柄,其中包含一对指针:一个指针指向该object的方法表,另一个指向该object的数据。用Java虚拟机的字节码表示的程序应该遵守类型规定。Java虚拟机的实现应拒绝执行违反了类型规定的字节码程序。
      Java虚拟机由于字节码定义的限制似乎只能运行于32位地址空间的机器上。但是可以创建一个Java虚拟机,它自动地把字节码转换成64位的形式。从Java虚拟机支持的数据类型可以看出,Java对数据类型的内部格式进行了严格规定,这样使得各种Java虚拟机的实现对数据的解释是相同的,从而保证了Java的与平台无关性和可 移植性。
       二、Java虚拟机体系结构 Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。
       1。Java指令集 Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。 Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。
      许多指令没有操作数,仅由一个单字节的操作符构成。 虚拟机的内层循环的执行过程如下: do{ 取一个操作符字节; 根据操作符的值执行一个动作; }while(程序未结束) 由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。
      指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为: 第一个字节*256+第二个字节字节码指令流一般只是字节对齐的。指令tabltch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。
       2。寄存器 Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。 Java虚拟机的寄存器有四种: pc:Java程序计数器。 optop:指向操作数栈顶端的指针。 frame:指向当前执行方法的执行环境的指针。
       vars:指向当前执行方法的局部变量区第一个变量的指针。 Java虚拟机 Java虚拟机是栈式的,它不定义或使用寄存器来传递或接受参数,其目的是为了保证指令集的简洁性和实现时的高效性(特别是对于寄存器数目不多的处理器)。 所有寄存器都是32位的。
       3。栈 Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。 (1)局部变量区 每个Java方法使用一个固定大小的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第一个局部变量的索引来寻址。
      (例如,一个具有索引n的局部变量,如果是一个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间。)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。
       (2)运行环境区 在运行环境中包含的信息用于动态链接,正常的方法返回以及异常传播。 ·动态链接 运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。
      动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存储结构相应的偏移地址。动态链接方法和变量使得方法中使用的其它类的变化不会影响到本程序的代码。 ·正常的方法返回 如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。
      执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的程序计数器增加一个恰当的数值,以跳过已执行过的方法调用指令,然后在调用者的执行环境中继续执行下去。 ·异常和错误传播 异常情况在Java中被称作Error(错误)或Exception(异常),是Throwable类的子类,在程序中的原因是:①动态链接错,如无法找到所需的class文件。
      ②运行时错,如对一个空指针的引用 ·程序使用了throw语句。 当异常发生时,Java虚拟机采取如下措施: ·检查与当前方法相联系的catch子句表。每个catch子句包含其有效指令范围,能够处理的异常类型,以及处理异常的代码块地址。
       ·与异常相匹配的catch子句应该符合下面的条件:造成异常的指令在其指令范围之内,发生的异常类型是其能处理的异常类型的子类型。如果找到了匹配的catch子句,那么系统转移到指定的异常处理块处执行;如果没有找到异常处理块,重复寻找匹配的catch子句的过程,直到当前方法的所有嵌套的catch子句都被检查过。
       ·由于虚拟机从第一个匹配的catch子句处继续执行,所以catch子句表中的顺序是很重要的。因为Java代码是结构化的,因此总可以把某个方法的所有的异常处理器都按序排列到一个表中,对任意可能的程序计数器的值,都可以用线性的顺序找到合适的异常处理块,以处理在该程序计数器值下发生的异常情况。
       ·如果找不到匹配的catch子句,那么当前方法得到一个"未截获异常"的结果并返回到当前方法的调用者,好像异常刚刚在其调用者中发生一样。如果在调用者中仍然没有找到相应的异常处理块,那么这种错误传播将被继续下去。如果错误被传播到最顶层,那么系统将调用一个缺省的异常处理块。
       (3)操作数栈区 机器指令只从操作数栈中取操作数,对它们进行操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或非通用寄存器的机器(如Intel486)上,也能够高效地模拟虚拟机的行为。操作数栈是32位的。它用于给方法传递参数,并从方法接收结果,也用于支持操作的参数,并保存操作的结果。
      例如,iadd指令将两个整数相加。相加的两个整数应该是操作数栈顶的两个字。这两个字是由先前的指令压进堆栈的。这两个整数将从堆栈弹出、相加,并把结果压回到操作数栈中。 每个原始数据类型都有专门的指令对它们进行必须的操作。每个操作数在栈中需要一个存储位置,除了long和double型,它们需要两个位置。
      操作数只能被适用于其类型的操作符所操作。例如,压入两个int类型的数,如果把它们当作是一个long类型的数则是非法的。在Sun的虚拟机实现中,这个限制由字节码验证器强制实行。但是,有少数操作(操作符dupe和swap),用于对运行时数据区进行操作时是不考虑类型的。
       4。无用单元收集堆 Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java语言具有无用单元收集能力:它不给程序员显式释放对象的能力。Java不规定具体使用的无用单元收集算法,可以根据系统的需求使用各种各样的算法。 5。
      方法区 方法区与传统语言中的编译后代码或是Unix进程中的正文段类似。它保存方法代码(编译后的java代码)和符号表。在当前的Java实现中,方法代码不包括在无用单元收集堆中,但计划在将来的版本中实现。每个类文件包含了一个Java类或一个Java界面的编译后的代码。
      可以说类文件是Java语言的执行代码文件。为了保证类文件的平台无关性,Java虚拟机规范中对类文件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。 。

    久***

    2019-03-08 00:28:09

类似问题

换一换
  • JAVA相关 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 176-195
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):