Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将多个文本文件合并为一个文本文件,保持每个文本文件的排序,但合并所有文本文件的排序_Java_Sorting_Batch File_Text - Fatal编程技术网

Java 如何将多个文本文件合并为一个文本文件,保持每个文本文件的排序,但合并所有文本文件的排序

Java 如何将多个文本文件合并为一个文本文件,保持每个文本文件的排序,但合并所有文本文件的排序,java,sorting,batch-file,text,Java,Sorting,Batch File,Text,我有6个文本文件。每一个都是一个播放列表,具体来说,每一行都包含一个完全限定的文件名,它们都位于同一目录中。但6个播放列表中的每一个都包含来自不同文件夹的文件。此外,每个播放列表都按字母顺序排序 我想将它们合并到一个文本文件中,包含所有单个文本文件中的所有行 我希望订单是随机的。但是,我希望遵守6个文本文件中每个文件的排序顺序 所以结果可以这样开始: C:\DirectoryE\fsdkfhj.avi C:\DirectoryA\jsazlkfjh.mp4 C:\DirectoryC\aldfk

我有6个文本文件。每一个都是一个播放列表,具体来说,每一行都包含一个完全限定的文件名,它们都位于同一目录中。但6个播放列表中的每一个都包含来自不同文件夹的文件。此外,每个播放列表都按字母顺序排序

我想将它们合并到一个文本文件中,包含所有单个文本文件中的所有行

我希望订单是随机的。但是,我希望遵守6个文本文件中每个文件的排序顺序

所以结果可以这样开始:

C:\DirectoryE\fsdkfhj.avi
C:\DirectoryA\jsazlkfjh.mp4
C:\DirectoryC\aldfkgdl.avi
C:\DirectoryD\basfjkdfhdksdkj.avi
C:\DirectoryE\gsdfsad.mp4
C:\DirectoryD\mfsdhsfjs.avi
C:\DirectoryA\nsdfkghkjhdf.mpg
C:\DirectoryE\hfdsskdfkemn.mp4
C:\DirectoryB\afdskfdfk.mpg
(忽略文件扩展名——它们只是示例,显然不会影响按字母顺序排列的文件名排序。)

但是请注意,目录不需要按顺序排列(应该是随机的)。但是任何给定目录中的文件名都应该按字母顺序排列

最好使用DOS批处理文件解决方案,也可以使用Java解决方案。谢谢

编辑:我将在28小时内回复这些解决方案。我可以这么说,没有测试,它们看起来都是可行的。我完全被这些解决方案所展示的创造力以及它们提供得如此之快的事实所震惊。我不知道stackexchange就是这样工作的。总有一天我会报答你的慷慨

@ECHO关闭
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filenames=file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt”
设置“outfile=%destdir%\outfile.txt”
::删除开始时的变量$
对于/F“delims=”('set$2^>Nul')中的%%a,请执行设置“%%a=”
SET/a filecount=0
SET/a itemcount=0
设置/a maxtracks=0
对于(%FileName%)中的%%a,请调用:getname“%sourcedir%\%%%a”
)
::现在进行选择
:选择
设置/a选择=(%RANDOM%%%filecount)+101
对于(1,1,%maxtracks%)中的/L%%t,如果已定义,则执行$%selection%%%t(
调用>>“%outfile%”回显%$%selection%%%t%%
设置“$%selection%%%t=”
设置/a项目计数-=1
好了
)
:完成
如果%itemcount%gtr 0转到选择
后藤:EOF
::获取trackname并存储到$1???
:getname
设置/a文件计数+=1
SET/a美元=文件计数+100
设置/a轨道=0
对于/f“tokens=1*delims=[]”中的%%p(
“查找/n/v”“^>%outfile%”回显%$%selection%%%t%%
设置“$%selection%%%t=”
设置/a项目计数-=1
好了
)
:完成
如果%itemcount%gtr 0转到选择
后藤:EOF
::获取trackname并存储到$1???
:getname
设置/a文件计数+=1
SET/a美元=文件计数+100
设置/a轨道=0
对于/f“tokens=1*delims=[]”中的%%p(
“查找/n/v”“^
@ECHO Off
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filenames=file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt”
设置“outfile=%destdir%\outfile.txt”
::删除开始时的变量$
对于/F“delims=”('set$2^>Nul')中的%%a,请执行设置“%%a=”
SET/a filecount=0
SET/a itemcount=0
设置/a maxtracks=0
对于(%FileName%)中的%%a,请调用:getname“%sourcedir%\%%%a”
)
::现在进行选择
:选择
设置/a选择=(%RANDOM%%%filecount)+101
对于(1,1,%maxtracks%)中的/L%%t,如果已定义,则执行$%selection%%%t(
调用>>“%outfile%”回显%$%selection%%%t%%
设置“$%selection%%%t=”
设置/a项目计数-=1
好了
)
:完成
如果%itemcount%gtr 0转到选择
后藤:EOF
::获取trackname并存储到$1???
:getname
设置/a文件计数+=1
SET/a美元=文件计数+100
设置/a轨道=0
对于/f“tokens=1*delims=[]”中的%%p(
“查找/n/v”“^>%outfile%”回显%$%selection%%%t%%
设置“$%selection%%%t=”
设置/a项目计数-=1
好了
)
:完成
如果%itemcount%gtr 0转到选择
后藤:EOF
::获取trackname并存储到$1???
:getname
设置/a文件计数+=1
SET/a美元=文件计数+100
设置/a轨道=0
对于/f“tokens=1*delims=[]”中的%%p(
“查找/n/v”“^
@echo off
setlocal enableextensions disabledelayedexpansion
设置“计数器=0”
对于(*.txt)中的%%f,请执行以下操作(
设置“基数=100000000”
设置/a“计数器+=1”
对于/f“usebackq delims=“%%a in(“%%~ff”)do(
延迟扩展
设置/a“基本+=(!随机!%%1000)*100+计数器”
对于(!base!)中的%%b,请执行以下操作(
端部
设置“_l.%%b=%%a”
设置“基=%%b”
)
)
)
对于/f“tokens=1,*delims==”('set _l.')中的%%a执行回显(%%b
基本思想是在输入文件的每一行前面加上一个随机数,然后根据这个数字对列表进行排序

  • 使用
    for
    命令对文件进行迭代。编写该命令是为了处理文件夹中的所有
    .txt
    文件。如果希望处理关闭的列表,请将该行更改为
对于%%f in(file1.txt file2.txt file3.txt x:\somewhere\otherfile.txt)执行以下操作
  • 使用
    for/f
    命令读取每个文件

  • 对于每个文件,随机序列从
    100000000
    (填充)开始,并为每行添加连续的随机数,以便为每个文件生成递增的数字序列并保持排序顺序。为避免为多个文件生成相同的随机值(文件中的一行可能会覆盖另一行),为每行生成的随机值乘以100,并添加一个计数器(每个文件递增)

  • 读取的数据存储在使用生成的随机数命名的环境变量中。这样,我们以后可以检索以数字排序的变量列表

  • 读取所有数据后,for/f的
    for
    命令将检索已定义变量的列表(该列表已排序),并输出其值

@echo off
setlocal enableextensions disabledelayedexpansion
设置“计数器=0”
对于(*.txt)中的%%f,请执行以下操作(
设置“基数=100000000”
设置/a“计数器+=1”
对于/f“usebackq delims=“%%a in(“%%~ff”)do(
延迟扩展
设置/a“基本+=(!随机!%%1000)*100+计数器”
对于(!base!)中的%%b,请执行以下操作
for %%f in ( file1.txt file2.txt file3.txt x:\somewhere\otherfile.txt ) do