A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class PictClient {
  2.         public static void main(String[] args) throws Exception {
  3.                
  4.                 if(args.length!=1){
  5.                         System.out.println("请选择一个jpg格式的图片");
  6.                         return;
  7.                 }
  8.                
  9.                 File file = new File(args[0]);
  10.                 if(!(file.exists() && file.isFile())){
  11.                         System.out.println("该文件有问题,要么不存在,要么不是文件");
  12.                         return;
  13.                 }
  14.                
  15.                 if(!file.getName().endsWith(".jpg")){
  16.                         System.out.println("图片格式错误,请重新选择");
  17.                         return;
  18.                 }
  19.                
  20.                 if(file.length()>1024*1024*5){
  21.                         System.out.println("文件过大,请重新选择!");
  22.                         return;
  23.                 }
  24.                
  25.                
  26.                 Socket s = new Socket("192.168.1.254", 10001);

  27.                 FileInputStream fis = new FileInputStream(file);

  28.                 OutputStream out = s.getOutputStream();

  29.                 byte[] buf = new byte[1024];
  30.                 int len = 0;
  31.                 while ((len = fis.read(buf)) != -1) {
  32.                         out.write(buf, 0, len);
  33.                 }

  34.                 // 告诉服务端数据已写完
  35.                 s.shutdownOutput();

  36.                 InputStream in = s.getInputStream();

  37.                 byte[] bufIn = new byte[1024];

  38.                 int num = in.read(bufIn);

  39.                 System.out.println(new String(bufIn, 0, num));

  40.                 fis.close();
  41.                 s.close();
  42.         }

  43. }
复制代码
这是老师写的用于多用户上传图片的客户端。
我的疑问是
File file = new File(args[0]);       为什么可以用主函数的数组做文件?

if(args.length!=1){
                        System.out.println("请选择一个jpg格式的图片");
                        return;

                }

这个判断是什么意思?为什么长度不等于1的时候就return?


希望懂的同学可以帮我解决,不胜感激!

27 个回复

倒序浏览
我也是昨天才看到这,我是这样理解的:1、客户端在运行时必须指定要上传一个图片,所以运行客户端时要指定一个图片的路径,而这个图片的路径是通过Dos命令的形式传入到主函数的数组中,也就是说:通过命令把图片路径(也就是字符串)传到了主函数的形参数组中,作为主函数形参字符串数组中的一个元素存在,当主函数运行时接受到了这个参数(也就是路径),所以就根据这个路径找到了这个图片;2、需求是这个客户端软件运行时必须制定一个图片路径,那么主函数的形参数组里面就肯定会有一个路径元素,该元素就是用户制定的图片路径,而且只能上传一个图片,所以一次就只能指定一个路径,但长度等于1时,说明用户传了一个字符串路径,如果不等于1就说明用户没有指定路径或者指定了多个路径,这是程序就要停止。我是这样理解的。
回复 使用道具 举报
本帖最后由 pengbeilin 于 2015-8-14 18:22 编辑

先把你的两个问题回答一下!
1.为什么可以用主函数的数组做文件?
主函数的数组是接收你在dos命令行里的字符串,就是你在编译文件的时候
输入 javac demo01.java 然后不是回车 而是接着输入字符串(可以输入多个,用空格隔开) 这个字符串就会被赋给主函数里的那个String类型的agrs[ ]数组!在这个程序里就是这样子把照片的路径输进去 比如是demo.jpg,然后通过获取agrs数组的值,就只要把agrs[0]的值赋给file(就像这样: File file = new File(args[0]);)   

2.看了我上面的解释,第二个问题就不是问题了,如果agrs为0 就是你在编译的时候 没有往命令行上输入照片路径的字符串,agrs里面就什么都没有,也就表示你没有选择照片!!

大概就这样子吧!还有哪里不懂吗?
回复 使用道具 举报 1 0
补个图应该会好点

QQ截图20150814181357.png (54.91 KB, 下载次数: 33)

差不多就这样子吧

差不多就这样子吧
回复 使用道具 举报
还没学到这里。不知道能不能赶上76期
回复 使用道具 举报
回复一下
回复 使用道具 举报
友好的帮你顶贴哦
回复 使用道具 举报
帮你顶下吧
回复 使用道具 举报
本帖最后由 蓬头小道士 于 2015-8-14 22:23 编辑

1、因为你这个文件是不确定的,是在程序执行时才给出的文件地址。
2、如果args的长度为1时,也就是一个字符,就不是图片文件名称的长度
回复 使用道具 举报
签到签到
回复 使用道具 举报
流水王朝 来自手机 中级黑马 2015-8-14 22:51:32
11#
签到签到
回复 使用道具 举报
友情顶贴
回复 使用道具 举报
pengbeilin 发表于 2015-8-14 18:09
先把你的两个问题回答一下!
1.为什么可以用主函数的数组做文件?
主函数的数组是接收你在dos命令行里的字 ...

懂了懂了!非常感谢
回复 使用道具 举报
川晶 发表于 2015-8-14 17:33
我也是昨天才看到这,我是这样理解的:1、客户端在运行时必须指定要上传一个图片,所以运行客户端时要指定 ...

懂了懂了!谢谢哦!因为我用的是苹果电脑 所以平时都没有用dos来执行 所以就不太懂这个操作
回复 使用道具 举报
陈cc 中级黑马 2015-8-15 19:04:26
15#
!!!!!!!!!
回复 使用道具 举报
前来学习!
回复 使用道具 举报
!!!!!!!!!
回复 使用道具 举报
haimeixuedao ?
回复 使用道具 举报
其实我看到这个也是疑问很多。
回复 使用道具 举报
顶一个。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马