关于java se 的小问题

java语言程序设计第7章程序清单7-4

package Program7;

import Program6.Program6_10GetCharacter;

public class Program7_4 {

    public static void main(String[] args) {
        char[] chars = createArray();

        System.out.println("The lowercase letters are: ");
        displayArray(chars);

        int[] counts = countLetters(chars);

        System.out.println();
        System.out.println("The occurrences of each letters are: ");
        displayCounts(counts);

    }

    public static char[] createArray() {
        char[] chars = new char[100];

        for (int i = 0; i < chars.length; i++)
            chars[i] = Program6_10GetCharacter.getRandomLowerCaseLetter();

        return chars;
    }

    public static void displayArray(char[] chars) {
        for (int i = 0; i < chars.length; i++) {
            if((i + 1) % 20 == 0)
                System.out.println(chars[i]);
            else
                System.out.print(chars[i] + " ");
        }
    }

    public static int[] countLetters(char[] chars) {
        int[] counts= new int[26];

        for (int i = 0; i < chars.length; i++) {
            counts[chars[i] - 'a']++;
        }
        return counts;
    }

    public static void displayCounts(int[] counts) {
        for (int i = 0; i < counts.length; i++) {
            if((i + 1) % 10 == 0)
                System.out.println(counts[i] + " " + (char)(i + 'a'));
            else
                System.out.print(counts[i] + " " + (char)(i + 'a') + " ");              
        }

    }
}

在 public static int[] countLetters(char[] chars) 方法里,用for (int i = 0; i < chars.length; i++) {counts[chars[i] - 'a']++;}可以实现对字符的计数,没能理解。哪位大神能说明一下么。书上解释没看懂。

5个回答

int[] counts= new int[26];counts这个数组有26个元素,的0下标存储的是a的个数,1下标存储b的个数,2下标存储c的个数……
chars[i] - 'a',把这个字符转换成对应的下标,比如chars[i]是'a',那么'a'-'a'=0,如果chars[i]是'b',那么'b'-'a'=1,等等。
所以让对应下标++实现了对这个字母的计数。

qq_34018371
qazqzad 回复caozhy: 昨天看书看到大半夜,脑袋懵b了![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif)里的count[char[i]- 'a']++;每个char[i]- 'a'都对应着0到26的数字。对应着a到z的情况,对吧?
3 年多之前 回复

=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。

=_=aa
这句话把我绕蒙圈了,看了一遍代码才闹明白
这个代码的作用是:
计算a,b,c这些字母分别出现过的次数。

你的需求是统计26个小写字母每个字母出现的次数,使用的是数组,那么就可以用每个字母对应一个数组元素,下标就是26个字母对应的0-25。
从0开始,那么下标计算方法就是每个字母相对第一个字母a的偏移。letterIndex = letter-'a'就得到下标了。例如a的下标就是0(第一个元素),c就是第三个元素……。

你要统计每个字母出现的次数吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java SE 两个小问题
我现在有两个问题:rn1. 我新建了一个MyJFrame继承JFrame 然后又新建了一个MyJPanel 继承JPanel rn [code=Java] public MyJFrame()rn rn setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn setBounds(100, 100, 450, 300);rn contentPane = new MyJPanel(); //新建的JPanelrn contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));rn contentPane.setLayout(new BorderLayout(0, 0));rn setContentPane(contentPane);rn [/code]rn但是我在JPanel中托了几个JRadioButton 但是一运行却看不见那几个按钮rn但是可以在这个面板上画东西 画的问题出现了 看下rnrn2. 我想画个拖拽的椭圆,能看的到时时变化的那种 我用变量记录了 mousePressed mouseDragged 然后在mouseDragged里加了 repaint();rn[code=Java]protected void paintComponent(Graphics g) rn g.setXORMode(Color.gray); rn switch(state)rn rn case 1:rn g.drawRect(sx, sy, ex - sx, ey - sy);rn break;rn case 2:rn g.drawOval(sx, sy, ex - sx, ey - sy);rn break;rn default:rn break;rn rn rn [/code]rn 可以画出东西来 但是问题可能出现在异或上,我发现比如画的椭圆,本来就是线框,只有在相交的地方有异或,中间的地方没有,要怎么解决:[img=http://b304.photo.store.qq.com/psb?/V10VreYt4Pw63O/WaePr.By9r9wFBvU*yMO2pklSVmW6RfJMhcI.fg9Jo8!/b/YZTnO7VIbwAAYp*LNbUUbwAA][/img]
Java SE的IO小问题
[code=java]import java.io.FileInputStream;rnimport java.io.FileOutputStream;rnimport java.io.IOException;rnimport java.io.InputStreamReader;rnimport java.io.OutputStreamWriter;rnrnpublic class IODemo rnrn public static void main(String[] args) throws IOException rn OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("mytext.txt"), "utf-8");rn osw.write("你好");rn osw.close();rn rn InputStreamReader isr = new InputStreamReader(new FileInputStream("mytext.txt"), "utf-8");rn char[] cbuf = new char[10];rn int len = isr.read(cbuf);rn System.out.println(len);rn System.out.println(new String(cbuf, 0, len));rn rnrn[/code]rn我用UTF-8存储的“你好”是六个字节, 为什么打印len是2? new String(cbuf, 0, len)怎么知道cbuf里的数据是utf-8编码?
Java SE 小问题
刚开始学Java,之前编的程序运行都没问题,最近运行突然出问题,提示rnrn错误: 在类 Fibonacci 中找不到 main 方法, 请将 main 方法定义为:rn public static void main(String[] args)rn否则 JavaFX 应用程序类必须扩展javafx.application.Applicationrnrn很简单的一个程序,不知道为什么突然main方法错误了rnrnpublic class Fibonaccirn public static void main(String[] args) rn int n= Integer.valueOf(args[0]);rn int j[] = new int[n];rn for(int i=0;i
java se基础!java se
java se基础!java se
SE反射机制的小问题
关于下面的invoke()方法,有错误,请指正rnrnimport java.lang.reflect.InvocationTargetException;rnimport java.lang.reflect.Method;rnrnrnpublic class TestReflection rnrn public static void main(String[] args) rn String s = "T";rn Class c = null;rn Object o = null;rn Method[] methods = null;rn try rn c = Class.forName(s);rn o = c.newInstance();rn methods = c.getMethods();rn catch (ClassNotFoundException e) rn e.printStackTrace();rn catch (InstantiationException e) rn e.printStackTrace();rn catch (IllegalAccessException e) rn e.printStackTrace();rn rn for(Method m :methods) rn System.out.println(m.getName());rn rn rn for(Method m :methods) rn if(m.getName().equals("mm"));rn try rn m.invoke(o,1);rn catch (IllegalArgumentException e) rn rn e.printStackTrace();rn catch (IllegalAccessException e) rn rn e.printStackTrace();rn catch (InvocationTargetException e) rn rn e.printStackTrace();rn rn rn rn rnrnrnrnclass Trn public void m() rn System.out.println("m");rn rn rn public void mm(int i) rn System.out.println(i+"mm");rn rn rn public String say() rn return "say";rn rn
关于java se 字符串的问题
才接触java,对于字符串有一点疑惑,希望大神解惑,String的对象一旦创建,就永远无法改变,意思是就放在堆中了,一直存在,直到对象没有引用被GC释放吗?
关于java se空指针的问题
class Arnrn A()rn rn test();rn rn public void test()rn rn System.out.println("a");rn rnrnclass B extends Arnrn public void test()rn rn System.out.println("b");rn rnrnpublic class Testrnrn public static void main(String[] args)rn rn B b = new B();rn rnrn为什么这个能运行。答案是brn可是我的理解是,new对象前是先去构造,于是来到了A类构造,结果是test方法,但是test方法被子类B重写了。所以应该调用B的方法。此时b还没完成创建,所以是空指针。rn不知道我的理解对不对,请高手帮我解决。rn1,为什么不是空指针rn2,怎么样更好的解释空指针呢
java se计算器java se计算器java se计算器java se计算器
java计算器java计算器java计算器
java se
编写一个Java Applet程序,在Applet内部现实一个蓝色反弹球的程序。rn通过mousePressed时间使该球开始运动,当球撞击Applet边框时,它应从边框弹回并以相反的方向运动。
Java SE 源码 Java SE 源码
Java SE 源码Java SE 源码Java SE 源码Java SE 源码
java SE
免费下载,学Java 好帮手.
Java se
定义一个长度为10的int数组,统计数组的最大值、最小值、奇数和偶数的个数。
JAVA SE
class Namernrn private String firstName;rn private String lastName;rnrn public Name()rnrn public Name(String firstName , String lastName)rn rn this.firstName = firstName;rn this.lastName = lastName;rn rnrn public void setFirstName(String firstName)rn rn this.firstName = firstName;rn rn public String getFirstName()rn rn return this.firstName;rn rnrn public void setLastName(String lastName)rn rn this.lastName = lastName;rn rn public String getLastName()rn rn return this.lastName;rn rnrnrnpublic class Personrnrn private final Name name;rnrn public Person(Name name)rn rn //this.name = name;//[color=#FF0000][/color]我若在此把上下注释拿掉,输出地结果是 》》悟空 八戒//若不拿掉注释怎么输出的都是 悟空。————其中的原理有些许模糊,希望高手指点上下一二!谢谢。rn this.name = new Name(name.getFirstName(), name.getLastName());rn rn public Name getName()rn rn //return name;rn return new Name(name.getFirstName(), name.getLastName());rn rn public static void main(String[] args)rn rn Name n = new Name("悟空", "孙");rn Person p = new Person(n);rn rn System.out.println(p.getName().getFirstName());rn rn n.setFirstName("八戒");rn rn System.out.println(p.getName().getFirstName());rn rnrn
Java SE
求大牛们推荐几本学习JAVA的入门书箱
java ee与java se
我在某处看到有:rnrnJava SE 是做电脑上运行的软件。rnrnJava EE 是用来做网站的-(我们常见的JSP技术)rnrnrn请问eclipse的se ee版本差别有多大,我下的ee可以编写电脑上运行的软件,也可以编写jsp,这是怎么回事??rnrnrn多谢rnrn
java基础教程(java SE)
初级入门教程,,,个人觉得很不错,一共400页,我是亲自学完才放上来的对了 ,我特地附上了 java从头到尾的学习顺序 ,和我一样自学的朋友再也不用像没头苍蝇一样乱撞了
Java EE & Java Se
JavaEE6_api JavaSE8_api
【Java SE】java反射机制
一、前言  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性,方法,泛型类型;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。  JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C+
【Java SE】SE语法备忘(1)
本文不包括基本方法体。 ———————————————————————————————— compareTo() 比较两个数字参数大小 模版: public int 指定数 compareTo( NumberSubClass referenceName 参数 ) 返回: 若 指定数 = 参数 返 0; 若 指定数 &amp;amp;amp;amp;amp;amp;amp;lt; 参数 返 -1; 若 指定数 &amp;amp;amp;amp;amp;amp;amp;gt; 参数 返 1。 ———————
java SE多线程(关于runnable接口实现多线程)
创建多线程时,如果使用同一个runnable对象,则多个线程共享一个runnable资源 public class MyThread implements Runnable { int i; @Override public void run() { while(true){ try { Thread.sleep((long)Math.random()*1000);
请问高手关于java se开发一些问题
请问高手,如何用j2se调用.lib库文件??如何判断系统是否为windows系统及其版本号??
关于Java SE成员内部类的问题,感谢各位
[code=java]package outerAndInnerClass;rnrnpublic class Outer rn private int x = 100;rn private String y = "hello world";rn // 内部类rn class Inner rn private String y = "hello";rn private void innerMethod() rn System.out.println("内部类中的y是:"+y);rn System.out.println("外部类中的y是:"+Outer.this.y);rn System.out.println("外部类中的x是:"+x);rn // 内部类调用外部类中的方法rn outerMethod();rn System.out.println("调用外部类方法后,外部类中的x是:"+x);rn rn rn rn public void outerMethod() rn x++;rn rn // 外部类方法中创建内部类对象rn public void makeInner() rn Inner in = new Inner();rn rn rn public static void main(String[] args) rn // 创建外部类对象outrn Outer out = new Outer();rn // 通过外部类对象创建内部类对象rn Outer.Inner in = out.new Inner();rn // 外部类调用内部类中的方法rn in.innerMethod();rn rn[/code]rn上述代码中,rn问题1:第23-25行是不是错误的(仅限此例中,不是应该先创建外部类对象才能创建内部类对象嘛)?如果是错的,怎么不报错?rn问题2:那第29-31行,我还见过这样写的:[code=java]Outer out = new Outer();rnInner in = out.new Inner();[/code]rn通过外部类对象创建内部类对象的语法规范到底是哪个(怎么多个Outer.)?还是说有好几种方法(非静态情况下)?我知道的有:[code=java]Outer out = new Outer();rnInner in = out.new Inner();[/code]rn和[code=java]Inner in = new Outer().new Inner();[/code]rn另外,rn[code=java]package outerAndInnerClass;rnrnclass Circle rn private double radius = 0;rn rn public Circle(double radius) rn this.radius = radius;rn getDrawInstance().drawShape(); // 先创建成员内部类的对象,再进行访问rn rn rn private Draw getDrawInstance() rn return new Draw();rn rn // 内部类rn class Draw rn public void drawShape() rn System.out.println(radius); // 外部类private成员rn rn rn[/code]rn问题3:上述代码中第8-12行(尤其是11行),这段代码是什么意思?个人觉得是在创建一个对象并调用方法,可是11行能用类名定义方法吗?rnrn新手自学问题比较多,麻烦各位大神了,谢谢!!
关于Java(TM)Platform SE binary
为何每次打开这个东西的时候都关闭不了了啊,不知道到底是什么原因,还是本人的Java程序有问题,我用的MyEclipse 而且是9.01版本的,另外装好了Sun公司的JavaVM JavaC之类,不知道是否发生冲突?
关于JAVA SE中克隆clone方法的问题
现在有如下代码rn[code=Java]class Addressrnrnpublic String detail;rnpublic Address(String detail)rnrnthis.detail = detail;rnrnrnrnclass User implements Cloneablernrnint age ;rnAddress address;rnpublic User(int age)rnrnthis.age = age;rnthis.address = new Address("广州天河区");rnrnpublic User clone() throws CloneNotSupportedExceptionrnrnreturn (User)super.clone();rnrn[/code]rnrnrn该User类默认继承Object类,那么在方法clone中的super.clone()应该是调用的Object类中的clone()方法.我的问题是,既然调用的是父类的方法,那么在super.clone()中是如何能够得到子类的Field的信息的,从而用子类的Field信息生成一个Object对象。rnrn同时我们都知道如下代码会出错,rn[code=Java]class Basernrnclass Sub extends Basernrnrnpublic class Testrnrnpublic static void main(String args[])rnrnBase base = new Base();rnSub sub = (Sub)base;rnrn[/code]rnrnrn但是为什么我的第一段代码里面 (User)super.clone()却能将Object强制转换为User类,且能够正常使用呢?rnrnrnrn此外,在重写clone()方法的时候,为什么一定要实现Cloneable接口呢,如果不实现该接口就会有异常产生,为什么?rn
求java大神,关于se中的文件操作
[code=java]import java.io.*;rnrnclass FileDemo4 rnrn public static void main(String[] args) rn rn File f = new File("e:");rn digui(f);rn rnrn public static void digui(File f)rn rn System.out.println(f.getPath());rn File [] name = f.listFiles();rn System.out.println(name.length);rn for(int i = 0 ;i < name.length; i++)rn rn System.out.println(name[i]);rn rn rnrn[/code]rnrn我的问题是File的构造函数中,e:和e:\\ 的区别是什么?还有为什么打印出的文件列表会出现以$开头的文件,但是在窗口中并未出现(已经设置了隐藏文件可见),以及这些文件有什么作用。望大神解答
关于JAVA泛型方法的小问题
import java.util.ArrayList;nnpublic class GenericStack n ArrayList list = new ArrayList<>();n public int getSize()n return list.size();n n public E peek()n return list.get(list.size() - 1);n n public void push(E e)n list.add(e);n n public E pop()n E e = list.get(list.size() - 1);n list.remove(getSize() - 1);n return e;n n public boolean isEmpty()n return list.isEmpty();n nnn为什么像push方法不是一个泛型方法而void前面不要加上呢?到底什么才n是泛型方法啊?n
关于hello,java的小问题.
不好意思,我知道问这种问题有点不好意思,但我是个初学者,愿意不耻下问,希望各位同志帮忙.rnrn*/hellojava.java/*rnpublic class hellojava rn public static void main (String[] args)rn System.out.println ("how are you java!!");rn rn rnrn在DOS里面 先编译 javac hellojava.javarn 再运行 java hellojavarnrn 提示说: Exception in thread "main" java.lang.NoClassDefFoundError: hellojavarnrn折腾了半个小时,怎么回事啊.thanks
关于java的一个小问题
public class BasicContainer rn public static void main(String[] args) rn Collection c = new HashSet();rn c.add("hello");rnrnc.add("hello"); add是哪个类的方法 是java.awt 里面的方法吗?java.awt用前不需要import吗?哪些类用前不需要import?rnrn
java初学 关于this的小问题
class Arn String name;rn public A(String x)rn name=x;rn rn public void func1()rn System.out.println("function1 of "+name+" is calling");rn rn public void func2()rn A a2=new A("a2");rn a2.func1();rn this.func1();//这里的this 改成 a1 为啥不行。?rn rnrnclass TestArn public static void main(String[] args)rn A a1=new A("a1");rn a1.func2();rn rn
关于java的小问题
在java程序中如何实现类似于C++中system("pause")的效果?就是让系统等我press any key 再 continuernrn多谢了
关于java多线程的小问题
我写了个测试类:rnpublic class Test extends Thread rn private String st ;rn private static List list = new ArrayList();rn public Test(int i)rn st = "str"+i;rn rn public static void main(String[] args) throws Exception rn String[] arr = new String[10];rn for(int i=0 ; i
关于java同步的小问题
我在网上看到如是说:rnwait(),notiify(),notifyAll() 必须在同步方法中使用!rnrn我想问这是为什么?rn我调用notifyAll() 在一个没有synchronized关键字的方法种不行么?我的class大概如下:rnpublic class AAArnrn private static mapDict = new Hashtable(); rnrn private boolean init()rn rn boolean bRet = false;rn bCanRead = false; //设置mapDict对象为不可读rn mapDict = new Hashtable();rn mapDict.put("key","value");rn bCanRead = true; //设置mapDict对象为可读rn Thread.currentThread().notifyAll();rn bRet = true;rn return bRet;rn rnrn public getValue(String key)rn rn while(!bCanRead)rn rn tryThread.currentThread().wait();rn catch(InterruptedException ex)rn rnrn return mapDict.get(key);rn rn
关于Java IO的小问题
有如下代码:rn[code=Java]rnimport java.io.ByteArrayInputStream;rnimport java.io.IOException;rnrnpublic class ByteArrayTesterrnrn public static void main(String agrs[]) throws IOExceptionrn rn byte[] buff = new byte[] 2, 15, 67, -1, -9, 9, 100, 122 ;rn for (byte b : buff)rn rn System.out.print(b + " ");rn rn System.out.println();rn ByteArrayInputStream in = new ByteArrayInputStream(buff, 1, 4);rn int data = in.read();rn while (data != -1)rn rn System.out.print(data + " ");rn data = in.read();rn rn in.close();rn rnrn[/code]rn打印结果为:rn2 15 67 -1 -9 9 100 122 rn15 67 255 247 rn假如我想在打印完4个后再打印后面的2个,怎么做?rn最笨的方法是再new一个ByteArrayInputStream实例:rnByteArrayInputStream in2 = new ByteArrayInputStream(buff, 5, 6);rn我想问能不能充分利用原来的ByteArrayInputStream实例in来打印5,6连个字节?rn-----------------------------------------------------------------rn本人初学者,请高手教教我哦~~~rn
关于java的几个小问题。。。
1、java的事件处理机制?rn 例如:rnpublic boolean action(Event e,Object o)rnrnoutput.setText("You entered a char "+o.toString());rnreturn true;rnrn编译会有一个warning ,好像是说重载了。rn2、java函数可以先使用,后定义?这与c++不同?rn3、applet的入口?rnrnrn rn
关于Java泛型的小问题
为什么下面两句不能通过编译:rnArrayList dogs = new ArrayList();rnArrayList animals = new ArrayList();rnrn其中,Dog是Animal的子类
关于JAVA的一点小问题
[img=https://img-bbs.csdn.net/upload/201603/17/1458228084_586121.png][/img][img=https://img-bbs.csdn.net/upload/201603/17/1458227807_265933.png][/img]刚刚接触Java,写了个小程序,但是编译不过,求指点
关于java的几个小问题。
什么是JPDA?rnjava的client和server VM有什么不同?rnAccessibility是干什么用的?rn
关于java applet 的小问题
有一个applet 嵌套到 AAA.JSP 网页里面 CODE ="myapplet.run"  WIDTH ="0"  HEIGHT ="0" ARCHIVE ="http://127.0.0.1/myproject/myApplet-1.0.0.jar"> AAA.JSP 和 myApplet-1.0.0.jar 都位于 myproject根目录 ,这样applet才能运行成功。 AAA.JSP 只能由用户 admin 访问,别的用户不能访问。 现在的问题是:admin用户访问http://127.0.0.1/myproject/myApplet-1.0.0.jar,可以把jar下载下来。郁闷。 如果只能让admin 只能访问AAA.JSP,并且admin在浏览器上输入http://127.0.0.1/myproject/myApplet-1.0.0.jar,不能浏览或下载该jar。也就是说只能访问页面,不能直接访问jar。怎么实现呢? 该如何实现。项目采用hibernate+spring+jpa架构。
关于java Point2D的小问题
看的Java语言程序设计基础篇第10版n书第9章第6节3中的程序清单9-5中用了Point2D类。在引用时写的是:nimport javafx.geometry.Point2Dn我用的是Eclipse,提示nn```n Multiple markers at this linen - The import javafx.geometry.Point2D is never usedn - Access restriction: The type 'Point2D' is not API (restriction on required library 'D:\java\jdk1.8.0_45\jre\lib\extn \jfxrt.jar')n```nnnn n后来查java的文档Java Platform Standard Edition 8 Documentation,写的是njava.awt.geom.Point2Dn这是咋回事?书上写错了吗?n
关于java socket编程的小问题
正在完成一个作业,题目是这样的,完成一个简单的tcp程序,有客户端和服务器端,客户端能上传文件到服务器端,我写了一下,但是有问题,我在socket编程的水平是临时抱佛脚的,望好心人能帮我看看哪里写的不对。这个是服务器端代码[code=Java]rnrnpackage chenyu.ninth.test;rnrnimport java.io.BufferedInputStream;rnimport java.io.FileOutputStream;rnimport java.io.InputStream;rnimport java.io.OutputStream;rnimport java.io.PrintStream;rnimport java.net.ServerSocket;rnimport java.net.Socket;rnrnpublic class TcpServer rn public static void main(String args[])throws Exceptionrn ServerSocket server = null;rn Socket client = null;rn server = new ServerSocket(8888);rn System.out.println("服务器端正在运行,等待客户端连接");rn client = server.accept();rn InputStream input = client.getInputStream();rn BufferedInputStream bis = new BufferedInputStream(input);rn OutputStream output = new FileOutputStream("D:\\tupian\\chenting.jpg");rn PrintStream out = new PrintStream(client.getOutputStream());rn String str ="上传成功";rn rn if(bis!=null&&output!=null)rn int temp=0;rn while((temp=bis.read())!=-1)rn output.write(temp);rn rn //out.println(str);rn rn out.println(str);rn bis.close();rn out.close();rn output.close();rn input.close();rn client.close();rn server.close();rnrnrnrnrn[/code]rn然后是客户端代码rn[code=Java]rnrnpackage chenyu.ninth.test;rnrnimport java.io.BufferedReader;rnimport java.io.FileInputStream;rnimport java.io.InputStream;rnimport java.io.InputStreamReader;rnimport java.io.OutputStream;rnimport java.io.PrintStream;rnimport java.io.PrintWriter;rnimport java.net.*;rnrnpublic class ClientTest rnrn /**rn * @param argsrn */rn public static void main(String[] args) throws Exceptionrn Socket client = null;rn client = new Socket("localhost",8888);rn InputStream input = new FileInputStream("D:\\tupian\\2.gif");rn OutputStream output = client.getOutputStream();rn PrintStream ps = new PrintStream(output,true);rn BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));rn tryif(input!=null&&ps!=null)rn int temp=0;rn while((temp=input.read())!=-1)rn ps.write(temp);rn rn catch(Exception e)rn System.out.println("源文件不存在");rn rn String str = buf.readLine();rn System.out.println(str);rn buf.close();rn output.close();rn input.close();rn ps.close();rn client.close();rn rnrn rnrnrnrnrnrnrnrn[/code]rn我现在只是做小小的试验,就让他传一张指定目录的图片,运行之后,目标文件夹下是生成了图片,但是我是不能反访问的,它提示我 该文件被另一程序占用,如果我停止运行,会有异常报出,但我看不懂是什么意思,现在图片是能访问的,而且,我在服务器端设置的返回信息在客户端也收不到,问题应该是在服务器端的读文件上面。我把异常贴一下:rnrnException in thread "main" java.net.SocketException: Connection resetrn at java.net.SocketInputStream.read(SocketInputStream.java:168)rn at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)rn at java.io.BufferedInputStream.read(BufferedInputStream.java:235)rn at chenyu.ninth.test.TcpServer.main(TcpServer.java:26)rnrn希望能有人回答我。
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数