黑马程序员技术交流社区

标题: 毕老师第24天网络编程02的一个疑问!求解答 [打印本页]

作者: joe520kay    时间: 2015-8-14 16:19
标题: 毕老师第24天网络编程02的一个疑问!求解答
  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?


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


作者: 川晶    时间: 2015-8-14 17:33
我也是昨天才看到这,我是这样理解的:1、客户端在运行时必须指定要上传一个图片,所以运行客户端时要指定一个图片的路径,而这个图片的路径是通过Dos命令的形式传入到主函数的数组中,也就是说:通过命令把图片路径(也就是字符串)传到了主函数的形参数组中,作为主函数形参字符串数组中的一个元素存在,当主函数运行时接受到了这个参数(也就是路径),所以就根据这个路径找到了这个图片;2、需求是这个客户端软件运行时必须制定一个图片路径,那么主函数的形参数组里面就肯定会有一个路径元素,该元素就是用户制定的图片路径,而且只能上传一个图片,所以一次就只能指定一个路径,但长度等于1时,说明用户传了一个字符串路径,如果不等于1就说明用户没有指定路径或者指定了多个路径,这是程序就要停止。我是这样理解的。
作者: pengbeilin    时间: 2015-8-14 18:09
本帖最后由 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里面就什么都没有,也就表示你没有选择照片!!

大概就这样子吧!还有哪里不懂吗?
作者: pengbeilin    时间: 2015-8-14 18:16
补个图应该会好点

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

差不多就这样子吧

差不多就这样子吧

作者: ℃葫芦    时间: 2015-8-14 18:45
还没学到这里。不知道能不能赶上76期
作者: wang949055945    时间: 2015-8-14 21:07
回复一下
作者: 要踏实小伙子    时间: 2015-8-14 21:10
友好的帮你顶贴哦
作者: Sinyuyu    时间: 2015-8-14 21:11
帮你顶下吧
作者: 蓬头小道士    时间: 2015-8-14 22:20
本帖最后由 蓬头小道士 于 2015-8-14 22:23 编辑

1、因为你这个文件是不确定的,是在程序执行时才给出的文件地址。
2、如果args的长度为1时,也就是一个字符,就不是图片文件名称的长度

作者: 木石不是牧师    时间: 2015-8-14 22:39
签到签到
作者: 流水王朝    时间: 2015-8-14 22:51
签到签到
作者: leiyingyin    时间: 2015-8-14 22:53
友情顶贴
作者: joe520kay    时间: 2015-8-15 18:49
pengbeilin 发表于 2015-8-14 18:09
先把你的两个问题回答一下!
1.为什么可以用主函数的数组做文件?
主函数的数组是接收你在dos命令行里的字 ...

懂了懂了!非常感谢
作者: joe520kay    时间: 2015-8-15 18:50
川晶 发表于 2015-8-14 17:33
我也是昨天才看到这,我是这样理解的:1、客户端在运行时必须指定要上传一个图片,所以运行客户端时要指定 ...

懂了懂了!谢谢哦!因为我用的是苹果电脑 所以平时都没有用dos来执行 所以就不太懂这个操作
作者: 陈cc    时间: 2015-8-15 19:04
!!!!!!!!!
作者: 18734903493    时间: 2015-8-15 19:15
前来学习!
作者: ooyeah    时间: 2015-8-15 20:45
!!!!!!!!!
作者: Marx_D    时间: 2015-8-15 20:55
haimeixuedao ?
作者: 永远的EOF    时间: 2015-8-15 21:49
其实我看到这个也是疑问很多。
作者: wangchao1992    时间: 2015-8-15 21:56
顶一个。。。
作者: 时光海苔丶    时间: 2015-8-15 22:30
真的有黑马币?

作者: keviner    时间: 2015-8-15 23:34
pengbeilin 发表于 2015-8-14 18:16
补个图应该会好点

受教了                  
作者: 樱花飘过    时间: 2015-8-15 23:54
虽然我没看懂,但是感觉好厉害的样子..................
作者: 巧克黑力    时间: 2015-8-16 00:06
有点没看懂的说
作者: 求学之路    时间: 2015-8-16 00:19
顶一下,顶顶顶
作者: 段山虎    时间: 2015-8-16 04:26
黑马就是不一样,越办越好
作者: 金牛男人    时间: 2015-8-16 09:17
帮你顶一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2